django - 如何在Elasticsearch中运行查询和过滤器的组合?

标签 django elasticsearch elasticsearch-dsl

我正在Django的虚拟项目中尝试使用elasticsearch。我正在尝试使用django-elasticsearch-dsl进行搜索。用户可以提供titlesummaryscore进行搜索。搜索应与用户提供的所有信息相匹配,但是如果用户未提供任何有关某物的信息,则应将其跳过。

我正在运行以下代码来搜索所有值。

client = Elasticsearch()

s = Search().using(client).query("match", title=title_value)\
    .query("match", summary=summary_value)\
    .filter('range', score={'gt': scorefrom_value, 'lte': scoreto_value})

当我对所有字段都有一个值时,搜索可以正常工作,但是例如,如果我不为summary_value提供值,尽管我希望搜索继续搜索其余值,结果是结果什么都没有。

如果用户不提供值,则字段默认情况下应该具有一些值吗?还是我应该如何处理?

更新1
我尝试使用以下内容,但是无论输入是否给出相同的结果,它都会每次返回。
s = Search(using=client)

if title:
    s.query("match", title=title)

if summary:
    s.query("match", summary=summary)


response = s.execute()

更新2
我可以使用to_dict()进行打印。
如果如下所示,则s为空
s = Search(using=client)
s.query("match", title=title)

如果是这样
s = Search(using=client).query("match", title=title)

然后它可以正常工作,但是如果我添加s.query("match", summary=summary),它什么也没做。

最佳答案

您需要分配回s:

if title:
    s = s.query("match", title=title)

if summary:
    s = s.query("match", summary=summary)

关于django - 如何在Elasticsearch中运行查询和过滤器的组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57447304/

相关文章:

django - 适用于多对多字段的Django 1.2.1内联管理员

django - pg_restore 不恢复某个表?

lucene - 我可以将 Elasticsearch 索引标记为不完整吗?我可以检索 “complete”索引列表吗?

elasticsearch - 如何在Elasticsearch中将中文分析器设置为一个字段

python - elasticsearch python pycharm

elasticsearch - 具有逻辑OR和AND条件的Elasticsearch Query DSL

python - Elasticsearch延迟存储并立即搜索

python - 将用户特定字段添加到 Django REST Framework 序列化程序

python - 通过 flowables 将现有 PDF 合并到新的 ReportLab PDF

python - 带有嵌套过滤器的Elasticsearch-dsl以及完全匹配的AND和OR条件