1

我正在使用 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>>,
  ...
);

...并假设我通过 自动生成 solr 模式dsetool,我希望能够编写一个 solr 查询来查找参加过测试的学生(通过特定的 test_name),并按该测试的分数(或百分位,或其他)。

4

2 回答 2

0

好的,所以基本上你想在表 test_score 和学生之间做一个JOIN对吗?

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

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

于 2016-04-05T19:19:01.957 回答
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 students WHERE solr_query='{"q":"test_name:Biology", "sort":"percentile desc"}' LIMIT 10;

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

于 2016-04-07T00:48:32.930 回答