Solr:查询短语返回某些情况的结果,而某些情况则不然

时间:2016-01-08 11:08:59

标签: solr solrj

我得到Solr的结果:

  • 运动
  • 世界卫生组织
  • 百分比

但我无法获得以下结果:

  • 体育(英国)
  • 世界卫生组织
  • 1%的

所有这些都在文本字段中,它肯定包含这些短语,我在索引器上使用了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过滤器时,我删除了词干分析器。

希望从长远来看这有助于其他人。 :)

1 个答案:

答案 0 :(得分:0)

找出问题所在。 对于&#34;体育(英国)&#34;和&#34; 1%&#34;,我使用的标记器删除了所有特殊字符,因此我更改了我的标记器。 至于&#34;世界卫生组织&#34;,它是由干扰器引起的,它将组织改为Organis并查询类似于&#34; Organisat&#34;保持原样。因此我没有得到结果。因此,当我使用ngram过滤器时,我删除了词干分析器。