【问题标题】:Search range of int values using djapian使用 djapian 搜索 int 值的范围
【发布时间】:2010-10-23 23:02:19
【问题描述】:

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

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

将搜索 0 到 10 cmets 之间的帖子。我找不到在 djapian 中执行此操作的方法,尽管我找到了 this issuepatch 来实现某种日期范围搜索。我还从描述某种范围查询的 xapian 官方文档中找到了this page。但是,我缺乏制定自己的原始 xapian 查询和/或将原始 xapian 查询输入 djapian 的知识。所以请帮帮我,我如何在 djapian 索引中查询一系列 int 值。

谢谢,

劳丽

【问题讨论】:

    标签: python django search xapian


    【解决方案1】:

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

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

    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)
    

    这只是将NumberValueRangeProcessor 添加到QueryParser

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

    【讨论】:

      猜你喜欢
      • 2019-08-12
      • 1970-01-01
      • 2022-01-09
      • 2020-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-13
      • 1970-01-01
      相关资源
      最近更新 更多