【问题标题】:Doing complex multi-table search queries using Solr使用 Solr 进行复杂的多表搜索查询
【发布时间】:2014-07-13 21:42:19
【问题描述】:

我刚开始学习 Solr,我学习它的原因是因为我想做高级搜索查询(在 SQL 中被认为很简单),但需要处理大量数据。从我读到现在的内容(使用日光浴室),我可以索引、更新、选择和删除,但只能针对一种数据(关系/表)。我想做的是能够在表之间执行操作(就像 SQL 会以他自己的方式)。这是我可以处理的示例场景。

以下是基于上述关系的数据示例。

<root>
    <!-- ID for Solr --->
    <id>some_id</id>
    <table>house</table>
    <house_id>1</house_id>
    <house_name>Gryffindor</house_name>
</root>

<root>
    <!-- ID for Solr --->
    <id>some_other_id</id>
    <table>student</table>
    <student_id>1</student_id>
    <firstname>Albus</firstname>
    <lastname>Dumbledore</lastname>
    <house_id>1</house_id>
</root>

<root>
    <!-- ID for Solr --->
    <id>some_different_id</id>
    <table>battle</table>
    <student_id_1>1</student_id_1>
    <student_id_2>3</student_id_2>
</root>

一个示例搜索查询将是“来自不同学院的互相打架的学生的全名以及他们各自学院的名称。

在 SQL 中,我会执行以下操作:

SELECT * FROM houses housA, students studA, houses housB, students studB, battles
WHERE studA.id_house == housA.house_name AND studB.id_house == housB.house_name AND
((studA.id == battles.id_1 AND studB.id == battles.id_2) OR (studA.id == battles.id_2 AND studB.id == battles.id_1));

解决方案将是 Dumbledore vs Snape 和 Potter vs Who 的每个字段(所有三个表)。

可以用 Solr 完成吗?

【问题讨论】:

    标签: solr solarium


    【解决方案1】:

    您必须从查询开始向后考虑 Solr。然后您将信息展平以符合您的需求。在您的情况下,Solr 中的实体似乎是一场战斗,然后您将所有其他信息(房屋、姓名等)扁平化到该记录中。这使您可以进行诸如“哪所房子最匹配”之类的查询。

    Solr 也支持嵌套文档,但它们的使用与数据库连接不太一样,并且似乎与您的用例不匹配。我只是在此处提及它,以便您了解它。

    【讨论】:

    • 这可能会派上用场。我想我将不得不制作许多数据模型以满足我的需求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多