1

我正在使用 djapian 作为我的搜索后端,并且我正在寻找一系列值。例如:

query = 'comments:(0..10)'
Post.indexer.search(query)

将搜索具有 0 到 10 条评论的帖子。我找不到在 djapian 中执行此操作的方法,尽管我发现了这个问题,并打了补丁来实现某种日期范围搜索。我还从描述某种范围查询的 xapian 官方文档中找到了这个页面。但是,我缺乏制定自己的原始 xapian 查询和/或将原始 xapian 查询输入 djapian 的知识。所以请帮帮我,我如何查询 djapian 索引以获取一系列 int 值。

谢谢,

劳里

4

1 回答 1

0

好的,我解决了。我将把答案留给后代。

首先要做的是将 a 附加NumberValueRangeProcessorQueryParser. 您可以通过扩展 djapian 来做到这一点Indexer._get_query_parser。注意前导下划线。下面是一个代码片段,展示了我是如何做到的。

from djapian import Indexer
from xapian import NumberValueRangeProcessor

class RangeIndexer(Indexer)
    def _get_query_parser(self, *args, **kwargs):
        query_parser = Indexer._get_query_parser(self, *args, **kwargs)
        valno = self.free_values_start_number + 0
        nvrp = NumberValueRangeProcessor(valno, 'value_range:', True)
        query_parser.add_valuerangeprocessor(nvrp)
        return query_parser

需要注意的行:

valno = self.free_values_start_number + 0

self.free_values_start_number一个int,并用作值 no,它是开始定义字段的第一列的索引。我0对此进行了添加,以表明您应该添加要进行范围搜索的字段的索引。

nvrp = NumberValueRangeProcessor(valno, 'value_range:', True)

我们发送valno来告诉处理器要处理什么字段。表示处理器的'value_range:'前缀,因此我们可以通过“value_range:(0..100)”进行搜索。简单地True表示'value_range:'应该被视为前缀而不是后缀。

query_parser.add_valuerangeprocessor(nvrp)

这只是NumberValueRangeProcessorQueryParser.

希望对任何对此有任何问题的人有所帮助。请注意,您需要为NumberValueRangeProcessor希望能够进行范围搜索的每个字段添加一个新字段。

于 2010-10-28T00:06:33.610 回答