加入Lucene

Jou*_*man 6 lucene join

有没有办法在Lucene中实现JOINS?

小智 12

您还可以使用新的BlockJoinQuery; 我在博客文章中对此进行了描述:

http://blog.mikemccandless.com/2012/01/searching-relational-content-with.html


小智 8

您可以手动执行通用连接 - 运行两次搜索,获取所有结果(而不是前N个),在连接键上对它们进行排序并交叉两个有序列表.但是那真的很难打败你的堆(如果列表甚至适合它).

有可能进行优化,但在非常特定的条件下.
即 - 你做一个自我加入,只使用(随机访问)Filters进行过滤,不Queries.然后,您可以手动迭代两个连接字段上的术语(并行),交叉每个术语的docId列表,过滤它们 - 这是您的连接.

有一种方法可以处理一个简单的亲子关系的流行用例 - 每个文档中相对较小的子项数 - https://issues.apache.org/jira/browse/LUCENE-2454
与@ntziolis提到的扁平化方法不同,这种方法可以正确处理以下情况:拥有一些简历,每个简历都有多个work_experience孩子,并尝试在YYY年找到在NNN公司工作的人.如果只是扁平化,你会收到任何一年为NNN工作并在YYY年某地工作的人的简历.

实际上,处理简单父子案例的另一种方法是展平您的文档,但确保不同子项的值由大的posIncrement间隔分隔,然后使用SpanNear查询来防止您的多个子查询跨子项匹配.有几年的LinkedIn演示文稿,但我找不到它.