0

我有多个具有单独架构的 Solr 实例。

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

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

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

我应该如何编写查询?

4

4 回答 4

6

train_station由于 IDF,您在顶部获得了s。

修复它的一个快速技巧是使用范围查询(其优点是得分恒定)和查询提升:q=köln&sort=query({!v="type:([airport TO airport]^3 OR [train_station TO train_station]^2)"}) desc.

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

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

于 2012-02-29T23:31:34.683 回答
1

只有当每个文档返回一个值时,您才能对函数进行排序。您绝对不能对多值字段或任何已标记的字段进行排序。如果字段包含“机场”(即使它包含“火车站”)和“火车站”,如果它包含“火车站”但不包含“机场”,似乎你需要一个返回“机场”的函数,然后排序在那。

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

于 2012-02-29T17:21:04.430 回答
1

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

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

于 2012-03-01T07:19:36.333 回答
0

要在字段本身中对项目进行排序,您必须按您想要的顺序对其进行索引,或者进行后处理。Solr 的排序只会对文档进行排序!

于 2012-02-29T17:16:21.267 回答