首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Solr执行复杂的多表搜索查询

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

Stack Overflow用户
提问于 2014-07-14 05:42:20
回答 1查看 315关注 0票数 0

我刚开始学习Solr,我学习它的原因是因为我想做高级搜索查询(在SQL中被认为是简单的事情),但是要处理大量的数据。从我目前所读到的(使用solarium),我可以索引、更新、选择和删除,但仅限于单一类型的数据(关系/表)。我想要做的是能够在表之间执行操作(就像SQL以自己的方式一样)。下面是我可以做的一个示例场景。

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

代码语言:javascript
复制
<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中,我会这样做:

代码语言:javascript
复制
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能做到吗?

EN

回答 1

Stack Overflow用户

发布于 2014-07-15 09:12:41

您必须从查询开始向后考虑Solr。然后将信息扁平化以满足您的需求。在您的例子中,Solr中的实体似乎是一场战斗,然后您将所有其他信息(房屋、姓名等)展平到该记录中。这让你可以查询“哪栋房子匹配最多”等。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24727226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档