Solr:查询短语 returns 在某些情况下会产生结果,而在某些情况下不会
Solr: the query phrase returns results for some cases and doesn't for some
我得到以下 Solr 结果:
- 运动
- 世界卫生组织
- 百分比
但我没有得到以下结果:
- 运动(英国)
- 世界卫生组织卫星
- 1%
所有这些都在肯定包含这些短语的文本字段中,并且我在索引器上使用了 ngram 过滤器,因此组合确实存在。
虽然 solr UI 的分析选项卡准确地显示了我的期望,但我的 java 输出没有得到所需的结果。
我的solrj代码如下:
query.setQuery("full_text:\"World Health Organisation\"");
此外,我必须添加 \".."\
,因为如果我删除它们,我的前端总是会出错,否则我得到的一半结果也不会出现。
有人可以帮忙解决我可能遗漏的问题吗?
非常感谢!
编辑包含:full_text 在schema.xml
中的定义
<field name="full_text" type="text_en" indexed="true" stored="false" multiValued="true"/>
<copyField source="title" dest="full_text"/>
<copyField source="content" dest="full_text"/>
<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">>
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="20"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
解法:
我想出了问题是什么。对于 "Sports (UK)" 和“1-percent”的情况,我使用的标记器删除了所有特殊字符,因此我更改了标记器。
至于 "World Health Organisation:, it was caused by the stemmer which changed Organisation to Organis and query like "Organisat" 则保持原样。
因此我没有得到结果。所以我删除了词干分析器,因为我正在使用 ngram 过滤器。
希望这对长期 运行 中的其他人有所帮助。 :)
找出问题所在。
对于 "Sports (UK)" 和“1-percent”的情况,我使用的标记器删除了所有特殊字符,因此我更改了标记器。
至于"World Health Organisation",是由于词干分析器将Organisation改为Organis,而"Organisat"等查询保持原样。因此我没有得到结果。所以我删除了词干分析器,因为我正在使用 ngram 过滤器。
我得到以下 Solr 结果:
- 运动
- 世界卫生组织
- 百分比
但我没有得到以下结果:
- 运动(英国)
- 世界卫生组织卫星
- 1%
所有这些都在肯定包含这些短语的文本字段中,并且我在索引器上使用了 ngram 过滤器,因此组合确实存在。 虽然 solr UI 的分析选项卡准确地显示了我的期望,但我的 java 输出没有得到所需的结果。
我的solrj代码如下:
query.setQuery("full_text:\"World Health Organisation\"");
此外,我必须添加 \".."\
,因为如果我删除它们,我的前端总是会出错,否则我得到的一半结果也不会出现。
有人可以帮忙解决我可能遗漏的问题吗?
非常感谢!
编辑包含:full_text 在schema.xml
中的定义<field name="full_text" type="text_en" indexed="true" stored="false" multiValued="true"/>
<copyField source="title" dest="full_text"/>
<copyField source="content" dest="full_text"/>
<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">>
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="20"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
解法: 我想出了问题是什么。对于 "Sports (UK)" 和“1-percent”的情况,我使用的标记器删除了所有特殊字符,因此我更改了标记器。 至于 "World Health Organisation:, it was caused by the stemmer which changed Organisation to Organis and query like "Organisat" 则保持原样。 因此我没有得到结果。所以我删除了词干分析器,因为我正在使用 ngram 过滤器。
希望这对长期 运行 中的其他人有所帮助。 :)
找出问题所在。 对于 "Sports (UK)" 和“1-percent”的情况,我使用的标记器删除了所有特殊字符,因此我更改了标记器。 至于"World Health Organisation",是由于词干分析器将Organisation改为Organis,而"Organisat"等查询保持原样。因此我没有得到结果。所以我删除了词干分析器,因为我正在使用 ngram 过滤器。