Lucene是否能够在文档中找到匹配的位置?

时间:2017-04-03 14:41:03

标签: lucene

假设我在Lucene中有100个索引的文档。我想搜索术语&#34;美国航空公司&#34;。 Lucene运行搜索并返回10个包含术语&#34; American Airlines&#34;的文档。我现在希望能够在我的UI中浏览这10个文档中的每一个,并自动突出显示/滚动到每个匹配项。这些都是具有唯一id-ed段落标记的html文档,因此我可以使用http://docurl#p_120之类的内容滚动到<p id="p_120">American Airlines is a big company.</p>。但是,我如何让Lucene告诉我该术语的哪个段落,以及它究竟在哪里,以便突出显示它?

1 个答案:

答案 0 :(得分:0)

您的问题是关于突出显示。您询问如何使用子文档索引文本,以便您知道子文档的id以突出显示。

你有三种可能性。但首先让我提醒你,lucene可以使用偏移量(=原始文本中的位置)进行突出显示 https://lucene.apache.org/core/6_4_0/highlighter/org/apache/lucene/search/highlight/package-summary.html 并且lucene知道子文档的概念是“被阻止的子文档”或“嵌套文档”或“嵌入文档”。

树的可能性:

  1. 使用有效负载存储每个术语出现的相应子文档的id。
  2. 存储每个术语的偏移量,并知道新子文档开始的偏移量。将ID与相应的偏移量一起存储在一个额外的字段中,并使用它来查找每个匹配的id。
  3. 将文档与所有子文档一起索引为块中的额外子文档。使用http://lucene.apache.org/core/6_4_0/join/index.html?org/apache/lucene/search/join/ToParentBlockJoinCollector.html
  4. 进行搜索