我刚刚开始学习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>
一个示例搜索查询将是&#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完成吗?
答案 0 :(得分:1)
您必须从查询开始向后思考Solr。然后,您将信息展平以满足您的需求。在您的情况下,似乎Solr中的实体将是一场战斗,然后您将所有其他信息(房屋,名称等)压缩到该记录中。这样你就可以进行查询,例如&#34;哪个房子最匹配&#34;等等。
Solr也支持嵌套文档,但它们的使用与数据库连接不完全相同,似乎与您的用例不匹配。我只是在那里提到它,让你意识到它。