如何在MemoryIndex文档上高效运行多个lucene搜索查询?

时间:2017-08-09 06:48:53

标签: search memory indexing lucene

我在lucene Java API中使用MemoryIndex来索引内存中的文本内容并对其运行查询。可以在单个文档上运行数百个此类查询以获取匹配项。我想知道这样做的有效方法。

目前我正在创建多个Query对象并循环遍历它们以查看哪个匹配我的内存文本。

文本大小可以是几KB。 查询将是复杂的布尔值和短语组合。 查询的大小可能大约为1KB。

1 个答案:

答案 0 :(得分:0)

这个问题已经存在了很长时间,我将尝试自己回答。
我通过将所有已解析的查询对象存储在列表中来实现此目的。我将使用查询解析器构建查询框架,并将其存储在内存中的列表中。

它将提高性能,因为不必每次出现新文本时都继续构建查询。
就我而言,我们有数百个复杂的查询,但是这些查询是静态的,不会改变。因此,将已解析的查询存储在内存中而不是每次都构建它们是有意义的。 一年多以前,我已经在我以前的公司中使用apache lucene和java实现了这一点。

注意:我遇到的一个主要问题是lucene中的默认停用词过滤器,该过滤器会修剪掉文本的某些部分,而这并不是我所需要的行为。 我再也无法访问该代码了,如果答案似乎很模棱两可,我们感到抱歉。


有用的类: https://lucene.apache.org/core/6_6_2/memory/org/apache/lucene/index/memory/MemoryIndex.html http://lucene.apache.org/core/6_6_2/queryparser/org/apache/lucene/queryparser/classic/QueryParserBase.html#parse-java.lang.String-