如何 select elasticsearch-dsl 中的特定字段 python

How to select specific fields in elasticsearch-dsl python

我正在使用 elasticsearch dsl 在 elasticsearch 上进行搜索:https://elasticsearch-dsl.readthedocs.org/en/latest/

如何在进行搜索查询时过滤特定字段:

我知道 elasticsearch 支持它: https://www.elastic.co/guide/en/elasticsearch/reference/1.4/search-request-fields.html

只是不知道如何在 Elasticsearch-dsl 中做同样的事情

当您拥有 Search 对象时,您可以对其调用 .fields() 函数并指定您想要的字段 return:

s = search.Search()
s = s.fields(["field1", "field2"])
...

文档中没有明确提到,但是可以在source for the search.py file and some test cases for the fields function

中看到fields函数

更新

从 ES 2.x 开始,fields() 方法已重命名为 source()

我将它用于所有字段:

from elasticsearch_dsl import Q, Search
from elasticsearch import Elasticsearch 

client = Elasticsearch('localhost:9200')

q = Q("multi_match", query='STRING_TO_SEARCH', fields=['_all'])
result = Search(index='YOUR_INDEX').using(client).query(q).execute()

或特定字段:

fields=['name',]

在 elasticsearch-dsl 版本中 6.x.x fields() 已弃用,结果异常。

使用 source(fields=None, **kwargs) 以便 projection

例如

s = Search()
s = s.source(["field1", "field2"])
s = Search()
s = s.source(include=['obj1.*'], exclude=["*.description"])
s = Search()
s = s.source(include=['obj1.*']).source(exclude=["*.description"])