我知道标题可能表明它是重复但我无法找到这个特定问题的答案:
我必须根据日期范围过滤搜索结果。每个文档的日期都存储(但没有编入索引)。使用过滤器时,我注意到过滤器是使用索引中的所有文档调用的。
这意味着随着索引的增长(当前只有大约300,000个文档),过滤器会变慢,因为它必须遍历每个文档。
我无法使用RangeQuery,因为日期没有编入索引。
如何仅对作为查询结果的文档应用过滤器AFTER以使其更有效?
我喜欢在交付结果之前做到这一点,而不是弄乱我的分数和收藏家。
答案 0 :(得分:3)
不太确定这是否会有所帮助,但我遇到了类似的问题,并提出以下内容(+注释):
因此,总结一下:将日期字段索引为数字字段;将查询构建为数字范围查询;将它们转换为缓存的过滤器包装器并挂在它们上面。
我认为你会看到一些壮观的加速你当前的索引使用率。
祝你好运!P.S。 我永远不会猜到使用Lucene时会有多快或多慢。我一直对两个方向感到惊讶!
答案 1 :(得分:1)
首先,要对字段进行过滤,必须将其编入索引。
其次,使用过滤器被认为是限制要搜索的文档集的最佳方式。其中一个原因是您可以缓存过滤结果以用于其他查询。过滤器数据结构非常有效:它是与过滤器匹配的一组文档。
但是如果你坚持不使用过滤器,我认为唯一的方法是使用布尔查询来进行过滤。