我正在使用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),以及按照该测试的分数(或百分位,或其他)对它们进行排序。
答案 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