[英]Solr.Net query returning false results
我正在尝试使用Solr.Net搜索Solr实例。 我有一个在模式中定义的字段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
不鼓励创建Text查询,但我应该怎么做呢?
我使用SolrNet.dll
版本0.4.0.2002
和Solr Instance 4.4.0
版本。
我找到了问题。 我得到错误结果的原因是因为我的查询选项中指定了SortOrder
。 它根据相关性得分覆盖了默认的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进行排序。
我不确定为什么在向SOLR发送文本查询时会覆盖SortOrder
。 但这似乎有效,因为它将选择具有确切术语而不是误报的前100行。
我将为未来的访问者留下这个答案,并且如果它提供了此搜索行为的原因,将接受任何未来的答案。
看起来两个查询是不同的,因为术语在第一个示例中被标记化而不是第二个,它受到双引号的保护。 你介意试试:
SolrQueryByField solrQuery = new SolrQueryByField("body", "\""+searchTerm+"\"");
这可能会给你与第二个查询相同的结果(如果不考虑排序)。 HIH
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.