使用Solr执行复杂的多表搜索查询

时间:2014-07-13 21:42:20

标签: solr solarium

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

enter image description here

以下是基于上述关系的数据样本。

<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>

一个示例搜索查询将是&#34;来自不同房屋的学生的全名,他们互相争斗以及他们各自的房子的名称。

在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完成吗?

1 个答案:

答案 0 :(得分:1)

您必须从查询开始向后思考Solr。然后,您将信息展平以满足您的需求。在您的情况下,似乎Solr中的实体将是一场战斗,然后您将所有其他信息(房屋,名称等)压缩到该记录中。这样你就可以进行查询,例如&#34;哪个房子最匹配&#34;等等。

Solr也支持嵌套文档,但它们的使用与数据库连接不完全相同,似乎与您的用例不匹配。我只是在那里提到它,让你意识到它。