在SOLR搜索上执行精确匹配

fre*_*gul 7 solr

我正在实施SOLR搜索.当我输入例如理查德·蔡斯时,我得到索引中的所有理查兹和所有的追逐,比如约翰尼·蔡斯等......实际上我只想归还所有与理查德和蔡斯相匹配的名字.

我的配置设置是

<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>
Run Code Online (Sandbox Code Playgroud)

我的查询搜索文本字段

文:理查德蔡斯

什么想法我做错了什么?

Sri*_*lan 10

您使用的是StandardTokenizerFactory,它遵循Word Boundary规则.

这意味着你的单词会在空格上分开.

如果你想要一个真正的完全匹配,即

Richard Chase要返回仅包含Richard Chase确切的文档,那么你应该使用KeywordTokenizerFactory.

但正如你所说,你想要Richard John Chase而不是Johnny Chase,它告诉我你想要Richard Chase的比赛.

您既可以搜索Richard AND Chase或更改默认操作schema.xmlAND不是OR.请注意此设置是全局的.


Kon*_*bov 5

您必须使用PhraseQuery(text:"Richard Chase")来获取文档,Ricahard并且文档Chase彼此靠近。例如,如果您还想查找,Richard X. Chase可以使用text:"richard chase"~1

参见http://www.solrtutorial.com/solr-query-syntax.html