我得到Solr的结果:
但我无法获得以下结果:
所有这些都在文本字段中,它肯定包含这些短语,我在索引器上使用了ngram过滤器,因此组合确实存在。 虽然solr UI的分析选项卡向我展示了我期待的内容,但我没有在我的java输出中获得所需的结果。
我的solrj代码如下:
query.setQuery("full_text:\"World Health Organisation\"");
此外,我必须添加\".."\
,因为如果我删除它们,我的前端总会出现错误,而另外一半的结果我也不会出现。
有人可以帮助解决我可能缺少的事情吗?
非常感谢!
编辑包含:schema.xml中full_text的定义
<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>
解决方案: 我弄清楚问题是什么。对于&#34;体育(英国)&#34;和&#34; 1%&#34;,我使用的标记器删除了所有特殊字符,因此我更改了我的标记器。 至于&#34;世界卫生组织:它是由干扰器引起的,它将组织改为Organis并查询类似于&#34; Organisat&#34;保持原样。 因此我没有得到结果。因此,当我使用ngram过滤器时,我删除了词干分析器。
希望从长远来看这有助于其他人。 :)
答案 0 :(得分:0)
找出问题所在。 对于&#34;体育(英国)&#34;和&#34; 1%&#34;,我使用的标记器删除了所有特殊字符,因此我更改了我的标记器。 至于&#34;世界卫生组织&#34;,它是由干扰器引起的,它将组织改为Organis并查询类似于&#34; Organisat&#34;保持原样。因此我没有得到结果。因此,当我使用ngram过滤器时,我删除了词干分析器。