автозаполнение в elasti c поиск с использованием python - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть индекс company_prod2, который возвращает хиты в кибане с помощью следующего запроса:

POST company_prod2/_search?pretty
{
    "suggest": {
        "field-suggest" : {
            "prefix" : "cooi",
            "completion" : {
                "field" : "Name_suggest",
                "fuzzy" : {
                    "fuzziness" : 2
                }
            }
        }
    }
}

, но когда я пытаюсь выполнить поиск, используя python elasti c, найдите библиотеку dsl со следующим кодом:

from elasticsearch_dsl import Search

 s = Search(using=es_client1, index=indexname)
 s = s.suggest('auto_complete', userinput, completion={'field': "Name_suggest"})
 response = s.execute()
 for hit in response['hits']['hits']:
     print(hit['_score'], hit['_source']['Name'])

Я не получаю никаких результатов. Я также пытался использовать нативную библиотеку python:

from elasticsearch import Elasticsearch
es = Elasticsearch("localhost:9200")
res = es.search(index="company_prod2", body={"suggest": {"Name_suggest" : {"prefix" : "cooi","completion" : {"field" : "Name_suggest","fuzzy" : {"fuzziness" : 2 } }}}})
print("Got %d Hits:" % res['hits']['total']['value'])
for hit in res['hits']['hits']:
    print(hit["_source"])

, но это также дает 0 просмотров.

, если я пытаюсь с curl используя следующую команду:

curl -X POST "localhost:9200/company_prod2/_search?pretty&pretty" -H 'Content-Type: application/json' -d'{"suggest": {"song-suggest" : {"prefix" : "co", "completion" : { "field" : "Name_suggest" }}}}'

Я с радостью получаю результаты. мне нужно использовать библиотеку python, чтобы выполнить тот же запрос в поиске elasti c.

1 Ответ

1 голос
/ 30 апреля 2020

после просмотра документации по API, на самом деле обнаружен, что ответ имеет отдельные поля для автозаполнения:

from elasticsearch import Elasticsearch
es = Elasticsearch("54.208.27.149:9200")
res = es.search(index="company_prod2", body={"suggest": {"field-suggest" : {"prefix" : "cooi","completion" : {"field" : "Name_suggest","fuzzy" : {"fuzziness" : 2 } }}}})
print(res["suggest"])
print("Got %d Hits:" % res['hits']['total']['value'])
for hit in res['hits']['hits']:
    print(hit["_source"])
...