2017-04-03 52 views
0

假设我有100个在Lucene中索引的文档。我想搜索“美国航空”这个词。 Lucene运行搜索并返回10个包含术语“美国航空公司”的文件。我现在想要在我的用户界面中浏览这10个文档中的每一个,并自动突出显示/滚动到每个匹配项。这些都是带有唯一id-ed段落标签的html文档,所以我可以使用类似http://docurl#p_120的内容滚动到<p id="p_120">American Airlines is a big company.</p>。但是,我如何让Lucene告诉我该术语的段落是什么,以及它究竟在哪里,以便我能够突出它?Lucene能够在文档中找到匹配的位置吗?

+0

见Lucene的[荧光笔API(http://lucene.apache.org/core/6_4_0/highlighter/org/apache/lucene/search/highlight/Highlighter.html)。 – femtoRgon

回答

0

你的问题是关于突出显示。你问如何索引一个带有子文档的文本,这样你就可以知道子文档的ID以进行高亮显示。

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

树可能性:

  1. 使用有效载荷来存储相应的子文档的ID任期的每种情况。
  2. 存储一个术语每次出现的偏移量,并知道一个新的子文档在哪个偏移量开始。将ids与相应的偏移一起存储在额外的字段中,并使用它来查找每个命中的id。
  3. 将文档连同所有子文档一起索引为块中的额外子文档。搜索与http://lucene.apache.org/core/6_4_0/join/index.html?org/apache/lucene/search/join/ToParentBlockJoinCollector.html
相关问题