我正在Django的虚拟项目中尝试使用elasticsearch。我正在尝试使用django-elasticsearch-dsl进行搜索。用户可以提供title
,summary
和score
进行搜索。搜索应与用户提供的所有信息相匹配,但是如果用户未提供任何有关某物的信息,则应将其跳过。
我正在运行以下代码来搜索所有值。
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/