2016-01-08 55 views
2

我得到Solr的结果如下:Solr的:查询语句返回某些情况下,结果并不为一些

  • 体育
  • 世界卫生组织
  • %的

但我没有得到如下结果:

  • Sport(UK)
  • 世界卫生组织Organisat
  • 1%的

所有这些都是这肯定包含这些短语的文本字段,我已经用在索引器NGRAM过滤器,这样的组合确实存在。 尽管solr UI的分析选项卡显示了我所期望的,但我没有在我的java输出中获得所需的结果。

我solrj代码如下:

query.setQuery("full_text:\"World Health Organisation\""); 

另外,我要补充的\".."\因为我总是在我的前端出现错误,如果我删除它们,一半的结果,否则我也弄不到场。

有人可以帮助我可能会失踪?

非常感谢!

编辑纳入: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> 

full_text的高清解决方案: 我想通了什么问题了。对于“运动(英国)”和“1%”的情况,我使用的记号器是删除所有特殊字符,所以我改变了我的记号器。 至于“世界卫生组织:”,它是由将组织改为Organis的stemmer引起的,并且像“Organisat”这样的查询被保留为原样 因此,我没有得到结果,因此我删除了stemmer,因为我正在使用NGRAM过滤器。

希望这会帮助别人,从长远来看。:)

+0

在日志中,您可以检查solr收到的确切查询是什么?此外,您还想匹配使用双引号的原因。 – YoungHobbit

+0

查询与它在分析仪上显示的方式完全相同。是的,我试图得到一个完全匹配,但问题是,我得到了“世界卫生组织”和“世界卫生组织”相同的结果,但我没有得到“世界卫生组织”的结果。为什么会发生? – catchingPatterns

+0

此外,由于我使用的引号表示完全匹配,为什么不会在结果集中显示“1%”或“Sport UK”这样的短语? – catchingPatterns

回答

0

想通了什么问题了。 对于“体育(UK)”案件和“1%的”,该tokeniser我使用的是删除所有特殊字符,所以我改变了我的记号器 至于“世界卫生组织”,它是由将组织改为Organis的查询员以及像“Organisat”这样的查询保持原样造成的,因此我没有得到结果。所以我在使用ngram过滤器时删除了stemmer。

相关问题