SOLR:用空格搜索ngram字段而不给出预期的结果

时间:2014-05-30 06:55:04

标签: solr lucene

在ngram字段上执行搜索时,我遇到了从SOLR获取预期行为的问题。查询如下: order:Test Order AND status:ACCEPTED 我想要的结果是订单的所有内容"测试订单"和状态ACCEPTED。

我得到的是各种状态。我可以通过将这些问题重新编写为以下两个中的一个来解决它: order:Test + Order AND status:ACCEPTED order:Test AND order:Order AND status:ACCEPTED < / em>的

此查询是基于用户输入从Java后端执行的。我可以使用+来替换空白以修复问题,但我对SOLR很新,并且希望SOLR有一个解决方案,或者我使用了错误。

这让我相信SOLR会将空白处理为新搜索,并且由于没有指定字段,因此它只搜索所有内容。我尝试用qotation标记包裹它,但结果是什么,不知道为什么。我想要的行为是它找到每个在字段顺序中都有单词test或order的文档,并且状态为ACCEPTED。

字段类型如下所示:

<fieldType name="text_general_ngram" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="40"/>

    <!-- in this example, we will only use synonyms at query time
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt"    ignoreCase="true" expand="false"/>
    -->
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
  </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.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
  </analyzer>
</fieldType>

希望有人可以提供帮助:)

1 个答案:

答案 0 :(得分:0)

您需要附上短语&#34;测试订单&#34;否则它正在寻找&#34;订单&#34;无论你的默认字段是什么,然后&#34;测试&#34;在订单字段中,请尝试:

订单:(测试订单)AND状态:ACCEPTED

的Si