filter - Django haystack 缩小,字段之间使用 OR 运算符

标签 filter django-haystack narrowing

我进行了搜索。我按字段 A 缩小范围。我按字段 B 缩小范围。我得到的结果包括粗麻布和麻袋。我想要的是获得包含粗麻布或麻袋的结果。

sqs = sqs.narrow(fieldA='burlap')
sqs = sqs.narrow(fieldB='sack')

您可以通过以下方式进行一定程度的 OR 缩小:

sqs = sqs.narrow(fieldA=('burlap' or 'tweed' or 'plastic'))
sqs = sqs.narrow(fieldB='sack')

但是你最终仍然会得到粗麻布和麻袋的结果。此方法的替代方法如下,但它并不理想,因为它在大数据集上似乎很慢:

sqs = sqs.filter_or(fieldA='burlap')
sqs = sqs.filter_or(fieldB='sack')

当您需要丹尼尔·林赛时他在哪里?

最佳答案

YMMV - 文档 ( http://django-haystack.readthedocs.org/en/latest/searchqueryset_api.html#narrow ) 指出此方法不可在后端之间移植,并且语法取决于后端。该部分中的示例甚至有一个 lucene 看起来“SearchQuerySet().narrow('title:smoothie')”的示例。

在源代码中,看起来 haystack 非常信任地将您所拥有的任何内容作为您的狭义参数传递给后端。你没有说你正在使用什么后端,但也许这样的东西会让你在 solr 中得到你想要的 fq:

    sqs = sqs.narrow('fieldA:burlap OR fieldB:sack')

Filter_or 与narrow 不同,至少在solr 中是这样。 Filter_or 会将该子句添加到主查询中,从而产生一组不同的结果、不同的评分等。Narrow 将创建一个过滤查询。相反,它用于过滤您的原始结果(令人震惊,对吧?)并且它可以被缓存,如果您要经常使用该过滤器,这可以帮助提高性能。

哦,我输入了所有这些内容,但仍然不知道 Dan​​iel Lindsay 在哪里。

关于filter - Django haystack 缩小,字段之间使用 OR 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23544825/

相关文章:

ios - 速度 : iOS Using NSPredicate filterUsingPredicate vs. for 循环

c++ - 使用 -1 初始化结构或数组的无符号 {} 初始化

php - 我需要仅显示 mySQL 表中以 "250"前缀开头的记录

python - django-haystack elasticsearch多个索引错误结果

java - Elasticsearch 5.x 无法启动

mysql - 任何第三方搜索引擎(全文搜索等)都可以很好地处理 InnoDB 表吗?

java - 为什么最终变量不总是一个常量表达式?

c++ - G++ 警告 : narrowing conversion of

arrays - Angular2过滤问题

java - 通过 map 流进行过滤并收集到单个列表中?