首页 > 解决方案 > 多短语查询未找到我的文档

问题描述

作为 6.2.1 版升级计划的一部分,我正在设置一个新的 Solr (7.6.0)。令人惊讶的是,我们的一个简单测试失败了 - 插入带有一些文本的文档,然后尝试搜索它。

插入的文本是:

我会考虑的。

请求处理程序配置:

<requestHandler name="/select" class="solr.SearchHandler">    
     <lst name="defaults">
       <str name="echoParams">explicit</str>
       <int name="rows">20</int>
       <str name="df">text_en</str>
       <str name="hl.fragsize">100000</str>
       <str name="hl.maxAnalyzedChars">100000</str>
     </lst>
</requestHandler>

这是该字段的配置方式:

<field name="text_en" type="text_en" indexed="true" stored="true" multiValued="true" />


<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.CommonGramsFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true"  words="lang/stopwords_en.txt"/>
    <filter class="solr.EnglishPossessiveFilterFactory"/>
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.CommonGramsFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true"  words="lang/stopwords_en.txt"/>
    <filter class="solr.EnglishPossessiveFilterFactory"/>
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
  </analyzer>
</fieldType>

“will”“it”出现在 stopwords_en.txt 文件中。

根据Admin Web App 中的分析,这些是插入索引的最终标记:

text:     i i_will will_think think about about_it  
position: 1    1       2        3     4      4

搜索text_en:"I will think about it"未找到该文档。

奇怪的是,查询"I will think think about it"确实有效......

使用debugQuery,我注意到与我们当前版本相比有所不同。
6.2.1 正在使用MultiPhraseQuery
7.6.0 正在使用SpanNearQuery

在版本 6.2.1 中:

"rawquerystring":"text_en:\"I will think about it\"",
    "querystring":"text_en:\"I will think about it\"",
    "parsedquery":"MultiPhraseQuery(text_en:\"(i i_will) will_think think (about about_it)\")", ...

在 7.6.0 中(顺便说一句,也在 7.5.0 中):

"rawquerystring":"text_en:\"I will think about it\"",
    "querystring":"text_en:\"I will think about it\"",
    "parsedquery":"SpanNearQuery(spanNear([spanOr([spanNear([text_en:i, text_en:will_think], 0, true), spanNear([text_en:i_will, text_en:think], 0, true)]), text_en:about_it], 0, true))", ...

标签: solr

解决方案


我找到了罪魁祸首。
分享它以支持未来的谷歌人。
schema.xml 文件中的字段配置错误。
在“查询”分析器中,应该是“CommonGrams Query FilterFactory”而不是“CommonGramsFilterFactory”。


推荐阅读