在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>
希望有人可以提供帮助:)
答案 0 :(得分:0)
您需要附上短语&#34;测试订单&#34;否则它正在寻找&#34;订单&#34;无论你的默认字段是什么,然后&#34;测试&#34;在订单字段中,请尝试:
订单:(测试订单)AND状态:ACCEPTED
的Si