0

我刚开始学习 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 完成吗?

4

1 回答 1

1

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

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

于 2014-07-15T01:12:40.540 回答