如何更改solr为文档分配相关性分数的方式?

时间:2014-02-13 19:49:57

标签: c# solr solrnet solr4

我正在尝试在Solr Instance中搜索:

\\123.45.67.89\Lists\PLAYLIST\EAST

它会返回我的结果:

Some Text: \\123.45.67.89\Lists\SAVELIST\ATTTA
Some Text: \\123.45.67.89\lists\PLAYLIST\ABC
Some Text: \\172.21.52.41\Lists\PLAYLIST\EAST

我根据相关分数和ID字段进行排序。

似乎首先不是返回完全匹配,Solr以某种方式拆分搜索词中的所有内容,然后返回每个词的得分最高的那些。我使用的是Text_general字段类型。我通过SolrNet发送查询,如:

SolrQueryByField query = new SolrQueryByField("body", @"\\123.45.67.89\Lists\PLAYLIST\EAST");
solrQuery = solr.Query(query, new QueryOptions
{
    Rows = 100,
    Start = 0,
    OrderBy = new[] {new SortOrder("ID", Order.DESC), new SortOrder("score", Order.DESC) },

});

如果我首先将排序顺序与相关性进行交换,然后再将ID替换为第二个,那么它只会忽略solr实例中存在的最新记录,并返回旧记录(2-3天)而不是具有相同文本的最新记录。 (ID为自动增量编号,按desc顺序显示最新记录)

我的字段有不同类型的文本,范围从XML到文本,还有一些包含URL和文件路径等。

我的问题:

有没有办法修改Solr评分方法,以便精确匹配得分高于\.上分割的每个搜索字词的频率?

2 个答案:

答案 0 :(得分:0)

尝试使用以下分析器索引特定字段: http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.PathHierarchyTokenizerFactory text_general不适合文件路径

答案 1 :(得分:0)

我已经找到了获得相关结果的方法。我需要Boost查询。我做了:

SolrQueryByField query = new SolrQueryByField("body", @"\\123.45.67.89\Lists\PLAYLIST\EAST");
query.Boost(100);

这导致首先返回完全匹配。