作为从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))", ...
答案 0 :(得分:0)
我找到了罪魁祸首。
分享它以支持未来的Google员工。
schema.xml文件中的字段配置中存在错误。
在“查询”分析器中,它应该是“ CommonGrams 查询 FilterFactory”,而不是“ CommonGramsFilterFactory”。