2

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'])]))
4

1 に答える 1