Solr.Net查询返回错误结果(Solr.Net query returning false re

2019-10-19 08:13发布

我试图寻找Solr的实例与Solr.Net 。 我有场body ,其在模式定义:

<field name="body" 
       type="text_general" 
       indexed="true" 
       stored="true" 
       omitNorms="true"/>

text_general使用solr.StandardTokenizerFactory在模式和定义为:

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    <!-- 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"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

(我还没有与此字段类型改变任何东西,这是一个我使用Solr的默认安装了)

我想对查询检索词的记录LISTBU5.RCV ,它返回我含结果LISTBU4.RCV 。 喜欢:

Items left on queue: \\111.11.11.11\Lists\SAVELIST\ABC2\LISTBU4.RCV

错误结果:在搜索项末尾的数量是不同的

我查询的代码是:

SolrQueryByField solrQuery = new SolrQueryByField("body", searchTerm);

var result = solr.Query(solrQuery, new SolrNet.Commands.Parameters.QueryOptions
{
    Rows = 100, // 
    Start = 0,
    OrderBy = new[] { new SortOrder("ID", Order.DESC) },
});

但是,如果使用文本查询,如:

SolrQuery solrQuery = new SolrQuery("(body:" + "\"" + searchTerm + "\")");

它返回精确的结果。 我知道,在创建文本查询中没有鼓励Solr.Net ,但我应该怎么办呢?

我使用SolrNet.dll版本0.4.0.2002使用Solr实例4.4.0版本。

Answer 1:

我已经能够发现问题。 我得到的错误结果的原因是因为的SortOrder我的查询选项中指定。 它覆盖基于相关性得分的缺省排序顺序。 我只是修改我的查询选项,如:

var result = solr.Query(solrQuery, new SolrNet.Commands.Parameters.QueryOptions
{
    Rows = 100, // 
    Start = 0,
    OrderBy = new[] { new SortOrder("score", Order.DESC), new SortOrder("ID", Order.DESC) },
});

new SortOrder("score", Order.DESC)将强制基于相关性要返回的结果得分第一,然后它会做基于ID的排序。

我真的不知道为什么SortOrder发送文本查询SOLR时被覆盖。 但是,这似乎工作,因为这将选择前100行有确切期限,而不是误报。

我只想离开这个答案以供将来游客,并会接受任何未来的答案,如果它提供了理由的搜索行为。



Answer 2:

貌似这两个查询,因为期限在第1个例子是符号化 ,但不是第二,这是由双引号的保护是不同的。 你介意尝试:

SolrQueryByField solrQuery = new SolrQueryByField("body", "\""+searchTerm+"\"");

这可能给你相同的结果作为第二查询(如果不考虑顺序)。 HIH



文章来源: Solr.Net query returning false results
标签: c# solr solrnet