Python DSLで帯状疱疹をどのように呼び出しますか?
これは、「名前」フィールドでフレーズを検索し、「姓」フィールドで別のフレーズを検索する簡単な例です。
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 クエリで機能しますが、明らかに Python 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'])]))