我在lucene Java API中使用MemoryIndex来索引内存中的文本内容并对其运行查询。可以在单个文档上运行数百个此类查询以获取匹配项。我想知道这样做的有效方法。
目前我正在创建多个Query对象并循环遍历它们以查看哪个匹配我的内存文本。
文本大小可以是几KB。 查询将是复杂的布尔值和短语组合。 查询的大小可能大约为1KB。
答案 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-