根据字段值对Solr多值字段进行排序

时间:2012-02-29 15:48:39

标签: sorting solr multivalue

我有多个具有单独模式的Solr实例。

我需要按排序顺序接收多值字段,例如按类型:train_station,airport,city_district等:

q=köln&sort=query({!v="type:(airport OR train_station)"}) desc

我想在train_station类型之前看到机场类型文档。现在我总是在顶部获得train_station类型。

我该如何撰写查询?

4 个答案:

答案 0 :(得分:6)

由于IDF,你的train_station位于顶部。

快速解决问题的方法是使用范围查询(具有持续得分的优势)和查询提升:q=köln&sort=query({!v="type:([airport TO airport]^3 OR [train_station TO train_station]^2)"}) desc

这样,在其类型字段中具有airport的文档将得分为3,在其类型字段中具有train_station的文档将得分为2且具有{{1的文档}和airport在其字段类型中的得分为2 + 3 = 5(乘以常数)。

更优雅(和有效)的方法是编写自定义查询解析器(甚至是函数查询)。

答案 1 :(得分:1)

只有在每个文档返回单个值时才能对函数进行排序。您绝对无法对multiValued字段或任何标记化的字段进行排序。好像你需要一个返回“机场”的功能,如果该字段包含“机场”(即使它包含“火车站”)和“火车站”,如果它包含“火车站”而不是“机场”,然后排序在那。

另一种选择是在索引时处理这个问题。添加一个名为“airport_train_station_sort”的字段,如果字段包含“airport”,则返回1;如果字段包含“train station”但不包含机场,则返回2;如果不包含,则返回3。然后只需对该字段进行排序。

答案 2 :(得分:1)

你无法在SOLR中解决这个问题。检查文档,SOLR不会对多值字段进行排序。较旧版本的SOLR允许您尝试,但结果未定义且不可预测。

您要么更改架构并将此排序数据放入单值索引字段,要么需要进行多次查询,首先是机场,然后是城区,然后是火车站。

答案 3 :(得分:0)

要在字段内订购商品,您必须按照自己的意愿对其进行索引,或者进行后期处理。 Solr的排序只会排序文档!