我正在实现SOLR搜索。当我输入例如Richard Chase时,我得到
所有索引中的Richards和所有Chases,例如Johnny Chase等。实际上,我只想返回所有与Richard和Chase都匹配的名称。
我的配置设置是
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
和我的查询搜索文本字段
文字:理查德·蔡斯(Richard Chase)
有任何想法我在做什么错吗?
最佳答案
您正在使用StandardTokenizerFactory,它遵循Word Boundary rules。
这意味着您的单词会在空格上分开。
如果您想要真正的完全匹配,即Richard Chase
返回仅包含Richard Chase
的文档,那么您应该KeywordTokenizerFactory。
但是正如您提到的,您只需要 Richard John Chase 而不是 Johnny Chase ,它告诉我您想要匹配Richard 和 Chase。
您可以搜索Richard AND Chase
或将schema.xml
中的默认运算符更改为AND
而不是OR
。请注意,此设置是全局的。
关于solr - 在SOLR搜索上执行完全匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18224527/