我正在使用Lucene索引由片段组成的文档。 整个文档由描述它的字段(即作者,标题,发布日期)组成。 片段包含文本和标签(关键字)。我希望能够:
我在Lucene中读到了BlockJoinQuery,但我不确定它是否适合我的问题:例如,有一个以下文档:
document: title="Hello World" author="Sam Brown"
fragment 1: tags="sunny" text="...."
fragment 2: tags="cloudy" text="moody and sleepy"
我可以通过查询找到此文档:
tags:sunny and text:sleepy
?
这样的查询将不匹配任何子文档(片段),但它可能与父文档匹配 - 尽管lucene文档没有说明。
答案 0 :(得分:1)
案例1应该适用于BlockJoinQuery。
案例2运行良好,没有BlockJoinQuery。
案例3可以工作,虽然它有点棘手,因为你必须在父文档级别进行AND。即,使用两个MUST子句创建一个BooleanQuery。第一个子句是BlockJoinQuery(TermQuery(Term(“tags”,“sunny”))),第二个子句是BlockJoinQuery(TermQuery(Term(“text”,“sleepy”)))。我觉得应该有用吗?你不能在子文档(片段)级别进行ANDing,因为没有单个片段同时具有这两个术语。