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>
“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))", ...
解决方案
我找到了罪魁祸首。
分享它以支持未来的谷歌人。
schema.xml 文件中的字段配置错误。
在“查询”分析器中,应该是“CommonGrams Query FilterFactory”而不是“CommonGramsFilterFactory”。
推荐阅读
- sql - 无法从 xml 为任务 Azure Blob 下载任务创建任务。错误 0x80070057 参数正确
- php - 404 在 LAMP 上使用 Codeigniter 3,但在 MAMP 上工作
- sql-server - MS OLE DB 驱动程序:Power Query 与 ADO
- python - 用 -1 替换列中不是浮点数的所有内容
- c# - Assert.That() 不评估给定的约束
- json - 我正在阅读嵌套 JavaScript 对象的 JSON - 我想对其进行“排序”,以便具有特定值的字段的对象位于顶部
- javascript - 使用 JavaScript 以角度添加 routerLink 属性,但它没有进入链接
- java - AWS SqsListener 使用 Jackson 反序列化自定义对象
- c++ - 是否需要遍历 boost rtree 的层次结构才能达到最大效率?
- autocomplete - 您可以将自动完成结果分成两个输入字段吗?