【问题标题】:Is BlockJoinQuery in Lucene suitable to search for documents with fragments (parent-child relationship)Lucene中的BlockJoinQuery是否适合搜索带有片段的文档(父子关系)
【发布时间】:2011-12-06 05:54:07
【问题描述】:

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

  1. 按作者搜索所有带有标签 Foo 的片段。
  2. 按标题搜索所有文档。
  3. 搜索所有包含一些单词的文档(在任何片段中)

我在 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 文档并没有说明这一点。

【问题讨论】:

    标签: search lucene


    【解决方案1】:

    案例 1 应该适用于 BlockJoinQuery。

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

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

    【讨论】:

      猜你喜欢
      • 2013-08-15
      • 2012-07-20
      • 1970-01-01
      • 2011-02-12
      • 1970-01-01
      • 1970-01-01
      • 2015-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多