多词组查询找不到我的文档

时间:2019-01-22 16:09:27

标签: solr

作为从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>

“将” “已” 出现在stopwords_en.txt文件中。

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

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))", ...

1 个答案:

答案 0 :(得分:0)

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