我正在尝试在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评分方法,以便精确匹配得分高于\
或.
上分割的每个搜索字词的频率?
答案 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);
这导致首先返回完全匹配。