小智 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演示文稿,但我找不到它.
| 归档时间: |
|
| 查看次数: |
11907 次 |
| 最近记录: |