【问题标题】:Efficient positional query on small documents with Lucene使用 Lucene 对小型文档进行高效的位置查询
【发布时间】:2013-10-06 05:34:17
【问题描述】:

我有一个由数十亿个小文档(约 200 个字符/文档)组成的大型数据集。 执行位置查询并仅获取最佳三个文档的最有效方法是什么?

我的想法不是创建位置索引并在整个数据集上执行这样的查询,而是使用简单布尔查询的结果动态构建位置索引,然后执行位置查询以获得最佳的三个我需要的文件。

所以,而不是: 十亿文档 -> 建立一个位置索引 -> 执行位置查询 -> 获得最好的三个文档

我想做以下事情: 十亿个文档 -> 构建一个普通索引 -> 执行布尔查询 -> 获得最好的 250 个(高数字) -> 构建一个 in-ram 位置索引 -> 执行位置查询 -> 获得最好的三个文档。

我认为这样做我会通过支付一个小的近似值来减少搜索时间。 有没有其他/更好的解决方案来做到这一点?

【问题讨论】:

    标签: java search solr lucene indexing


    【解决方案1】:

    我会尝试使用搜索过滤器。也许TermsFilter 可能就足够了,但可以肯定的是,QueryWrapperFilter。这些可以用CachingWrapperFilter 包装,如果缓存过滤器的结果有好处的话。

    当传递给您的IndexSearcher.search 调用时,这会将查询限制为搜索过滤器接受的那些文档。

    由于您已包含 标记,过滤后的查询也可以在solr 中使用,使用fq parameter

    【讨论】:

      【解决方案2】:

      同意 femtoRgon。如果您的位置查询中出现相同的术语,您还可以考虑缓存位置查询的(子)结果。

      假设您使用 SpanQuery 对象,您可以自己引入一个 CachingSpanQuery 类,该类以某种方式存储生成的 Span。为了提高效率,您需要一种压缩方式来存储位置信息。

      【讨论】:

        猜你喜欢
        • 2012-03-21
        • 2017-11-06
        • 2023-04-03
        • 2013-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-22
        • 1970-01-01
        相关资源
        最近更新 更多