Lucene可以从单个索引文件中返回多个搜索结果吗?

Gru*_*eck 8 html java lucene indexing

我正在使用Lucene索引和搜索少量大型文档.使用Lucene网站上的演示,我已经将文档编入索引并能够搜索它们.但是,搜索结果不是特别有用,因为它指向文档的文件.对于非常大的文档,这不是特别有用.

我想知道Lucene是否可以索引这些非常大的文档并对它们进行抽象,从而提供更细粒度的结果.

一个例子可能更好地解释我的意思.考虑一本非常大的书,比如圣经.一个文件包含整本圣经文本,所以在演示中,搜索结果说"大马士革"会指向该文件.我想要做的是保留大文档,但搜索会返回指向书籍,章节或甚至与诗歌一样精确的结果.所以搜索"大马士革"可能会回归(第17章,第7章,第8节).

这是否可行(以及Lucene使用中的最佳实践),还是应该尝试将大文档分成许多小文件来索引?

如果它有所不同,我正在使用Java Lucene 2.9.0并且正在为大约1MB到4MB的HTML文件编制索引.在文件大小方面并不大,但相对于阅读它的人而言,它很大.


我不认为我已经尽可能地解释了这一点.这是另一个例子.

假设我使用我的大型HTML文件,并且(为了论证)搜索词"大马士革"出现3次.一旦在<div>标签内的第100行,在标签内的第2000 <p>行上,在<h1>标签内的第5000行上.是否可以使用Lucene进行索引,这样就会有3个结果,并且它们可以指向该术语所在的特定元素?

我认为我不想为该术语提供不同的文档结果.因此,如果"大马士革"一词在特定内容中出现两次<div>,则只会有一次匹配.

Kragen的评论中可以看出,当Lucene经历索引阶段时,我想要做的就是解析HTML.然后我可以根据解析器读入的内容来决定我想要考虑的块作为一个文档.因此,如果我看到具有某个类的div,我可以开始一个新的Lucene文档,当搜索div内容中的单词时,它将作为单独的命中返回.

这听起来像我想做的,是否可能?

Jus*_*tin 1

是 - Lucene 记录文件中匹配术语的偏移量,以便可以用来确定您需要在索引内容中的何处查找匹配项。

有一个 Lucene.Highlight 插件可以为你完成这个确切的任务 - 试试这篇文章,StackOverflow 上还有一些关于命中突出显示的问题(其中许多是为与 Web 应用程序一起使用而定制的,因此也可以做类似的事情)周围带有标签的匹配词<b>

更新:根据您搜索索引的方式,您可能还会发现将大型文档分成较小的部分(例如章节)也是一个好主意 - 但这更多是关于您想要如何组织、优先级和呈现的问题将您的结果呈现给最终用户。

例如,假设用户搜索“foo”,并且有两本书包含该术语。第一本书(书 A)可能包含 2 章,每一章都多次引用“foo”,但是该术语在本书的其余部分中几乎没有提及,但是第二本书(书 B)包含许多对“foo”的引用,但是它们分散在整本书中。如果您按书索引,那么您可能会发现书 B 是第一个命中的,但是按章节索引的,您可能会发现书 A 中的 2 章是前 2 个命中,然后是书 B 中的章节。

最后,显然,索引中的每个匹配文档都会向用户显示 1 次点击 - 如果您想向用户显示匹配书籍的列表,那么显然按书索引,但是您可能会发现向用户显示更合适带有匹配章节的列表,在这种情况下显然是按章节索引的。