我使用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/