0

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

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

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

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

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

4

2 回答 2

1

我会尝试使用搜索过滤器。也许 aTermsFilter可能就足够了,但可以肯定的是, a QueryWrapperFilterCachingWrapperFilter如果缓存过滤器的结果是有益的,这些可以用 包裹起来。

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

由于您已包含标记,因此过滤查询也可以在 solr 中使用,使用fq参数.

于 2013-09-30T15:41:59.927 回答
0

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

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

于 2014-01-07T13:54:20.777 回答