1

我如何在弹性搜索 dsl python 模块中搜索多字段,例如titlebody字段并按created_at字段 DESC 排序。

我有这个仅在title字段上搜索的示例:

q = request.GET.get('q', None)
s = Search(using=elastic_client, index='post').query('match', title=q)
response = s.execute()

我怎样才能做到这一点?

4

2 回答 2

5

找到解决方案:

from elasticsearch_dsl.query import MultiMatch

q = request.GET.get('q', None)
query = MultiMatch(query=q, fields=['title', 'body'], fuzziness='AUTO')
s = Search(using=elastic_client, index='post').query(query)
response = s.execute()
于 2016-03-09T13:11:05.880 回答
3

现在还有MultiSearch类。所以你有可能:

from elasticsearch_dsl import MultiSearch, Search

ms = MultiSearch(index='post')

ms = ms.add(Search().filter('term', tags='title'))
ms = ms.add(Search().filter('term', tags='body'))

responses = ms.execute()

然后你可以对它进行分组、排序等等。但结果是每个过滤器的响应集合。

于 2019-12-05T06:57:21.673 回答