如何禁止Solr搜索字符串中的特定关键字

时间:2014-05-29 21:52:20

标签: solr full-text-search

如果关键字集中的某个关键字匹配,我需要一种方法来阻止搜索字符串的结果。

例: 假设用户在搜索查询中搜索“bad restaurant”,如何阻止关键字“bad”的查询字符串的所有结果。

2 个答案:

答案 0 :(得分:0)

这可以通过StopFilterFactory完成。 StopFilterFactory通常用于过滤掉' a','和',''等等...但是,人们也可以指定其他'关键字作为停用词。

这是一个例子。请注意,我只在查询期间使用StopFilterFactory,因此它仅包含在“查询”中。分析仪。 ' profanity_words.txt'列出所有待排除的单词。

<fieldType name="soundex" class="solr.TextField">
    <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.PhoneticFilterFactory" encoder="Soundex" inject="true"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.StopFilterFactory"
                ignoreCase="true"
                words="lang/profanity_words.txt"></filter>
        <filter class="solr.PhoneticFilterFactory" encoder="Soundex" inject="true"/>
    </analyzer>
</fieldType>

答案 1 :(得分:-1)

您可以使用filterQueries并在应用程序端准备过滤器。 有不同的方法来做到这一点。 如果只有2或3&#34;坏&#34;单词,你可以添加一个过滤查询,如:

localhost:8080/?q=bad restaurant&fq=MY_TEXTFIELD:bad

(可能您需要+用于空间bad+restaurant%3A用于:

如果您有更多&#34;受保护的单词&#34;您可以使用同义词列表和令牌,如下所示:

localhost:8080/?q=bad restaurant&fq=MY_TEXTFIELD:qwasyxerdfcv

synonyms.txt
qwasyxerdfcv,bad,fucking,terrible

您还可以使用显式映射,具体取决于您应用此同义词。