更新时间:2024-11-29 GMT+08:00

敏感词过滤

操作场景

对查询返回结果中的敏感词进行过滤。

  • 查询时如果带上参数distrib=false,则不支持对敏感词进行过滤。
  • 仅对String和Text类型的字段进行敏感词过滤处理。

前提条件

已成功安装Solr服务。

操作步骤

  1. 配置、更新敏感词

    配置敏感词
    1. 下载配置集模板。

      solrctl confset --get confWithSchema ./test_exclude

    2. 配置敏感词列表“excludeWords.txt”。
      • 支持敏感词的上限为一万个词。
      • 如果是文本字段,敏感词的匹配与分词器有关。即如果文本字段中含有敏感词,则对文本字段分词后,能够分出敏感词。
      • 敏感词列表中有重复的敏感词时,保留敏感词级别高的敏感词。
      • 查询时,过滤掉敏感级别高于等于参数excludePriority值的敏感词。

      vi ./test_exclude/conf/excludeWords.txt

      #例如,敏感词,敏感级别
      you,4
      daisy,10
      me,2
      solr,7
    3. 在查询请求处理器中配置敏感词过滤组件。在test_exclude/conf/solrconfig.xml 添加如下配置:
      <requestHandler name="/exclude" class="solr.SearchHandler">
           <lst name="defaults">
             <str name="echoParams">explicit</str>
             <int name="rows">10</int>
             <bool name="preferLocalShards">false</bool>
           </lst>
           
           <arr name="components">
             <str>query</str>
             <str>exclude_terms</str>
             <str>facet</str>
             <str>facet_module</str>
             <str>mlt</str>
             <str>highlight</str>
             <str>stats</str>
             <str>debug</str>
             <str>expand</str>
           </arr>
      </requestHandler>
      • 该配置已经配置到confWithSchema/conf/solrconfig.xml 中。
      • 敏感词处理组件名称为exclude_terms。
    4. 创建配置集。

      solrctl confset --create exclude_conf ./test_exclude

    5. 创建Collection,指定配置集为exclude_conf。

      solrctl collection --create exculde_coll -c exclude_conf -s 3 -r 1 -m 1

    更新敏感词

    1. 下载要更新的配置集exclude_conf到本地路径update目录下。

      solrctl confset --get exclude_conf ./update

    2. 更新update目录下的敏感词列表。

      vi ./update/conf/excludeWords.txt

    3. 更新该配置集到Zookeeper上。

      solrctl confset --update exclude_conf ./update/

    4. reload使用该配置集的Collection,使得敏感词生效。

      solrctl collection --reload exculde_coll

  2. 查询,Solr Admin UI使用示例,在Request-Handler (qt)中输入“/exclude”,在Raw Query Parameters中输入“excludePriority=2”。

    图1 Solr Admin UI

    图1结果集中“excludeResultNum”表示已过滤掉的结果数目。

    • 在Request-Handler (qt)中输入“/exclude”,其中“/exclude”为1.c中配置的requestHandler名称。
    • 在Raw Query Parameters中输入“useExclude=false”,可关闭对查询结果的敏感词过滤。