按子文档集合中的值对 solr 响应进行排序
Sort solr response by value in subdocument collection
我正在使用 DSE solr 为包含 UDT 集合的 cassandra table 建立索引。我希望能够根据这些 UDT 中的值对搜索结果进行排序。
给出一个简单的例子table...
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), 并按该测试的分数(或百分位数,或其他)对它们进行排序。
好的,基本上你想在 table test_score 和学生之间做一个 JOIN 对吧?
根据官方文档:http://docs.datastax.com/en/datastax_enterprise/4.8/datastax_enterprise/srch/srchQueryJoin.html
只有当 2 table 共享相同的分区键时才能加入 Solr 核心,而在您的示例中不是这种情况...
很遗憾,您无法按 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 * 来自学生 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
我正在使用 DSE solr 为包含 UDT 集合的 cassandra table 建立索引。我希望能够根据这些 UDT 中的值对搜索结果进行排序。
给出一个简单的例子table...
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), 并按该测试的分数(或百分位数,或其他)对它们进行排序。
好的,基本上你想在 table test_score 和学生之间做一个 JOIN 对吧?
根据官方文档:http://docs.datastax.com/en/datastax_enterprise/4.8/datastax_enterprise/srch/srchQueryJoin.html
只有当 2 table 共享相同的分区键时才能加入 Solr 核心,而在您的示例中不是这种情况...
很遗憾,您无法按 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 * 来自学生 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