대상 포진은 Python DSL에 어떻게 부릅니까?Elasticsearch Python DSL에서 대상 포진과 솜털 모양을 사용합니까?
"name"필드와 "surname"필드에있는 구를 검색하는 간단한 예제입니다.
import json
from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search, Q
def make_dsl_query(fields):
"""
Construct a query
"""
es_client = Elasticsearch()
my_query = Search(using=es_client, index="my_index", doc_type="my_type")
if fields['name'] and fields['surname']:
my_query = my_query.query(Q('bool', should=
[Q("match", name=fields['name']),
Q("match", surname=fields['surname'])]))
return my_query
if __name__ == '__main__':
my_query = make_dsl_query(fields={"name": "Ivan The Terrible", "surname": "Conqueror of the World"})
response = my_query.execute()
# print response
for hit in response:
print(hit.meta.score, hit.name, hit.surname)
1) 대상 포진을 사용할 수 있습니까? 그리고 어떻게? 난 많은 것들을 시도하고 그것에 대한 설명서에서 아무것도 찾을 수 없습니다.
이 정상적인 Elasticsearch 쿼리에서 작동하지만 분명히 파이썬 DSL에서 다른 방법으로 불리는 것 ...
my_query = my_query.query(Q('bool', should=
[Q("match", name.shingles=fields['name']),
Q("match", surname.shingles=fields['surname'])]))
2) 어떻게 내 경기에 흐릿한 매개 변수를 전달합니까? 아무 것도 찾을 수없는 것 같습니다. 이상적으로는 이런 식으로 뭔가를 할 수있을 것입니다 : 당신이 당신의 매핑에서 그들을 정의 할 필요가 포진을 사용하려면
my_query = my_query.query(Q('bool', should=
[Q("match", name=fields['name'], fuzziness="AUTO", max_expansions=10),
Q("match", surname=fields['surname'])]))
고맙습니다. 그래도 퍼지를 허용하려면 어떻게해야합니까? 지금은 퍼지 검색에 필요한 검색어가 포함 된 사전을 만들어 Q 객체 ({...})로 변환하는 결과를 얻었습니다. 쿼리에 매개 변수를 전달하는 더 좋은 방법이 있습니까? 소스 코드는 쿼리가 추가 매개 변수를 허용하지 않음을 나타냅니다. –
물론'Q ("match", name__shingles = { 'query': fields [ 'name'], 'fuzziness': 'AUTO'})'괜찮습니다. kwargs는 근본적으로 결과 json의 키입니다. . –
대단히 고마워요! –