我有一个由数十亿个小文档(~200个char / doc)组成的大型数据集。 执行位置查询并获得最佳三个文档的最有效方法是什么?
我的想法不是创建一个位置索引并在整个数据集上执行这样的查询,而是使用简单的布尔查询的结果动态构建位置索引,然后执行位置查询以获得最佳的三个我需要的文件。
所以,而不是: 十亿个文档 - >建立一个正面指数 - >执行位置查询 - >得到最好的三个文档
我想做以下事情: 十亿个文档 - >建立一个正常的索引 - >执行布尔查询 - >得到最好的250(高数字) - >用结果建立一个内部位置索引 - >执行位置查询 - >得到最好的三个文档。
我认为通过这样做,我将通过支付一个小的近似来减少搜索时间。 是否有其他/更好的解决方案呢?
答案 0 :(得分:1)
我会尝试使用搜索过滤器。也许TermsFilter
可能是足够的,但相当肯定的是QueryWrapperFilter
。如果缓存过滤器的结果是有益的,可以用CachingWrapperFilter
包裹它们。
当传递给您的IndexSearcher.search
来电时,这会限制查询搜索过滤器接受的那些文档。
由于您已添加solr标记,因此也可以使用fq
parameter在过滤器中使用过滤查询。
答案 1 :(得分:0)
同意femtoRgon。如果您的位置查询中出现相同的术语,您还可以考虑缓存位置查询的(子)结果。
让我们假设您使用SpanQuery对象,您可以自己引入CachingSpanQuery类,以某种方式存储生成的Spans。为了提高效率,您需要一种压缩方式来存储位置信息。