我使用Djapian按关键字搜索对象,但我希望能够过滤结果。为此,最好使用Django的QuerySet API:

if query.strip():
    results = Model.indexer.search(query).prefetch()
else:
    results = Model.objects.all()
results = results.filter(somefield__lt=somevalue)
return results


但是Djapian返回的是ResultSet个对象,而不是Hit个对象。我当然可以在Python中“手动”过滤对象,但是在过滤所有对象的情况下(当查询为空时)是不现实的-我必须从数据库中检索整个表。

我是否为此而使用Djapian感到幸运?

最佳答案

我仔细研究了它的来源,发现Djapian有一种可以应用于其结果的过滤器方法。我刚刚尝试了下面的代码,它似乎正在工作。

我的索引器如下:

class MarketIndexer( djapian.Indexer ):

    fields = [ 'name', 'description', 'tags_string', 'state']
    tags = [('state', 'state'),]


这是我过滤结果的方式(不要在第一行做通配符使用的事情):

objects = model.indexer.search(q_wc).flags(djapian.resultset.xapian.QueryParser.FLAG_WILDCARD).prefetch()
objects = objects.filter(state=1)


现在,执行时,它会带来状态等于“ 1”的Market

关于python - Djapian-过滤结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1483874/

10-12 21:22