在子文档集合中按值排序solr响应

时间:2016-04-05 19:04:08

标签: solr cassandra datastax-enterprise datastax-startup

我正在使用DSE solr来索引包含UDT集合的cassandra表。我希望能够根据这些UDT中的值对搜索结果进行排序。

给出一个简单的示例表...

create type test_score (
  test_name text,
  percentile double,
  score int,
  description text
);

create table students (
  id int,
  name text,
  test_scores set<frozen<test_score>>,
  ...
);

...并假设我通过dsetool自动生成solr架构,我希望能够编写一个solr查询来查找已经参加测试的学生(通过特定的test_name),以及按照该测试的分数(或百分位,或其他)对它们进行排序。

2 个答案:

答案 0 :(得分:0)

好的基本上你想在表test_score和学生之间做一个 JOIN 吧?

根据官方文件:http://docs.datastax.com/en/datastax_enterprise/4.8/datastax_enterprise/srch/srchQueryJoin.html

仅当2个表共享相同的分区键时才可以加入Solr核心,而在您的示例中并非如此...

答案 1 :(得分:0)

很遗憾,您无法按UDT字段排序。

但是,我不确定UDT的价值在这里。也许我对你的用例知之甚少。我看到的另一个问题是每个分区键都是学生ID,因此每个学生只能存储一个测试结果。更好的方法可能是将测试ID用作聚类列,以便您可以将学生的所有测试结果存储在单个分区中。像这样:

CREATE TABLE students (
id int,
student_name text,
test_name text,
score int,
percentile double,
description text,
PRIMARY KEY (id, student_name, test_name)
);

学生名称有点多余(每个分区的每一行都应该相同),但它不一定是聚类列。

然后你可以对任何字段进行排序:

SELECT * FROM学生WHERE solr_query =&#39; {&#34; q&#34;:&#34; test_name:Biology&#34;,&#34; sort&#34;:&#34;百分位数desc& #34;}&#39;限制10;

我使用了此处描述的JSON语法:https://docs.datastax.com/en/datastax_enterprise/4.8/datastax_enterprise/srch/srchJSON.html