【问题标题】:How to efficiently run multiple lucene search queries on MemoryIndex document?如何在 MemoryIndex 文档上高效地运行多个 lucene 搜索查询?
【发布时间】:2023-04-03 10:04:01
【问题描述】:

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

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

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

【问题讨论】:

  • 您只是尝试实现简单的搜索和测量性能,还是更像是一个您可能面临性能问题的理论问题?
  • 这用于执行流式分析。我们必须针对每个传入的文档匹配多个规则,并根据它匹配的规则进行分类。

标签: search memory indexing lucene


【解决方案1】:

这个问题已经提出了很长一段时间,我会尝试自己回答。
我通过将所有已解析的查询对象存储在一个列表中来实现这一点。我将使用 Query Parser 构建查询并将其存储在内存中的列表中。

它将提高性能,因为我不必在每次出现新文本时都继续构建查询。
在我的例子中,我们有数百个复杂的查询,但这些都是静态的,不会改变。因此,将解析后的查询存储在内存中而不是每次都构建它们是有意义的。 一年多前,我在以前的公司使用 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-

【讨论】:

    猜你喜欢
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 2013-10-06
    相关资源
    最近更新 更多