如何在 Solr 中使用 join 和 sort?
How to use join with sort in Solr?
我正在尝试根据它们在 Solr 中所属的 'Contact' 的 'Name' 对类型 'Case' 的文档进行排序。但是案例没有 'ContactName' 字段或类似字段,只有 'ContactId'.
我能找到的唯一示例是此示例的迭代 link:https://wiki.apache.org/solr/Join
但是由于事后的排序,我无法将其应用于我的情况。下面给出了我想要的案例,但之后我无法按联系人姓名对其进行排序,因为它只有 returns 个案例字段。
{!join from=Id to=ContactId}*:*
SQL 相当于我想要的是这样的:
SELECT Case.Id, Contact.Name
FROM Case
LEFT JOIN Contact
ON Case.ContactId = Contact.Id
ORDER BY Contact.Name ASC;
所以在一些挖掘和 Solr 培训之后回答我自己的问题:
在像 Solr 这样的 NoSql 数据库中使用连接不是最佳实践。如果您需要连接,那么您的数据库结构错误。您应该在文档本身中索引您需要的所有内容,即使它是多余的。所以在我的例子中,我应该在我的 'Case' 文档中索引 'Contact.Name' 字段。
不过,如果您使用的是 SolrCloud 但它不支持连接,则显然可以在 Solr 中使用 SQL 查询以防万一。但是,可以按以下方式解决此问题:
SELECT s1.Id
FROM salesforce s1, salesforce s2
WHERE s1._type_ = 'Case' and s2._type_ = 'Contact' AND s1.ContactId = s2.Id
ORDER BY s2.Name ASC
需要注意的是'.'后面的字段就像 's1.Id' 中的 'Id' 必须在架构中激活 'docValues'。有关 docValues 的更多信息是 here.
我正在尝试根据它们在 Solr 中所属的 'Contact' 的 'Name' 对类型 'Case' 的文档进行排序。但是案例没有 'ContactName' 字段或类似字段,只有 'ContactId'.
我能找到的唯一示例是此示例的迭代 link:https://wiki.apache.org/solr/Join 但是由于事后的排序,我无法将其应用于我的情况。下面给出了我想要的案例,但之后我无法按联系人姓名对其进行排序,因为它只有 returns 个案例字段。
{!join from=Id to=ContactId}*:*
SQL 相当于我想要的是这样的:
SELECT Case.Id, Contact.Name
FROM Case
LEFT JOIN Contact
ON Case.ContactId = Contact.Id
ORDER BY Contact.Name ASC;
所以在一些挖掘和 Solr 培训之后回答我自己的问题:
在像 Solr 这样的 NoSql 数据库中使用连接不是最佳实践。如果您需要连接,那么您的数据库结构错误。您应该在文档本身中索引您需要的所有内容,即使它是多余的。所以在我的例子中,我应该在我的 'Case' 文档中索引 'Contact.Name' 字段。
不过,如果您使用的是 SolrCloud 但它不支持连接,则显然可以在 Solr 中使用 SQL 查询以防万一。但是,可以按以下方式解决此问题:
SELECT s1.Id
FROM salesforce s1, salesforce s2
WHERE s1._type_ = 'Case' and s2._type_ = 'Contact' AND s1.ContactId = s2.Id
ORDER BY s2.Name ASC
需要注意的是'.'后面的字段就像 's1.Id' 中的 'Id' 必须在架构中激活 'docValues'。有关 docValues 的更多信息是 here.