我刚开始学习Solr,我学习它的原因是因为我想做高级搜索查询(在SQL中被认为是简单的事情),但是要处理大量的数据。从我目前所读到的(使用solarium),我可以索引、更新、选择和删除,但仅限于单一类型的数据(关系/表)。我想要做的是能够在表之间执行操作(就像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));解决方案是邓布利多vs斯内普和波特vs谁的每个字段(所有三个表)。
用Solr能做到吗?
发布于 2014-07-15 09:12:41
您必须从查询开始向后考虑Solr。然后将信息扁平化以满足您的需求。在您的例子中,Solr中的实体似乎是一场战斗,然后您将所有其他信息(房屋、姓名等)展平到该记录中。这让你可以查询“哪栋房子匹配最多”等。
Solr也支持嵌套文档,但它们的用法与数据库连接不完全相同,而且似乎与您的用例不匹配。我只是在这里提一下,让你意识到这一点。
https://stackoverflow.com/questions/24727226
复制相似问题