如果关键字集中的某个关键字匹配,我需要一种方法来阻止搜索字符串的结果。
例: 假设用户在搜索查询中搜索“bad restaurant”,如何阻止关键字“bad”的查询字符串的所有结果。
答案 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
您还可以使用显式映射,具体取决于您应用此同义词。