Lucene中的BlockJoinQuery是否适合搜索带有片段的文档(父子关系)

时间:2011-10-12 15:22:26

标签: search lucene

我正在使用Lucene索引由片段组成的文档。 整个文档由描述它的字段(即作者,标题,发布日期)组成。 片段包含文本和标签(关键字)。我希望能够:

  1. 按作者搜索所有片段,其中包含标签Foo。
  2. 按标题搜索所有文件。
  3. 搜索所有文档,其中包含一些单词(在任何片段中)
  4. 我在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文档没有说明。

1 个答案:

答案 0 :(得分:1)

案例1应该适用于BlockJoinQuery。

案例2运行良好,没有BlockJoinQuery。

案例3可以工作,虽然它有点棘手,因为你必须在父文档级别进行AND。即,使用两个MUST子句创建一个BooleanQuery。第一个子句是BlockJoinQuery(TermQuery(Term(“tags”,“sunny”))),第二个子句是BlockJoinQuery(TermQuery(Term(“text”,“sleepy”)))。我觉得应该有用吗?你不能在子文档(片段)级别进行ANDing,因为没有单个片段同时具有这两个术语。