Как сделать Autocomplete поиск с помощью ElasticSearch?

Кто может поделиться примером как сделать Autocomplete поиск с помощью ElasticSearch? Для этого нужно использовать AJAX, чтобы отправлять запрос GET на нужный URL? Совсем не ясна схема
  • Вопрос задан
  • 3540 просмотров
Пригласить эксперта
Ответы на вопрос 2
MintTea
@MintTea
Я лично использовал Completion Suggester, который подходит, если вам заранее известны запросы, которые может искать пользователь. В моем случае это были названия населенных пунктов.

Общая схема примерно такая. В зависимости от используемого вами фреймворка и php-клиента к эластику, код можете дописать самостоятельно. Также я опускаю детали о настройке русской морфологии, если она вам нужна, т.к. это еще более глобальный вопрос.

1. Создаете отдельный индекс для suggester'а
curl -XPUT http://localhost:9200/typeahead/

2. Создаете отдельный тип в этом индексе и задаете ему корректный mapping
curl -XPUT http://localhost:9200/typeahead/locality/_mapping -d '{
    "properties": {
        "suggest": {
            "type": "completion"
        }
    }
}'


3. Заполняете его вашими данными
curl -XPOST http://localhost:9200/typeahead/locality/ -d '{
    "suggest": {
        "output": "Москва, Московская область, Россия",
        "input": ["Москва"]
    }
}'
curl -XPOST http://localhost:9200/typeahead/locality/ -d '{
    "suggest": {
        "output": "Новосибирск, Новосибирская область, Россия",
        "input": ["Новосибирск"]
    }
}'


4. Создаете контроллер в вашем приложении, который будет отвечать на ajax-запросы

5. Внутри контроллера дергаете сервер elasticsearch'а
curl -XGET http://localhost:9200/typeahead/_suggest -d '{
    "locality-suggest" : {
        "text" : "Новосиб",
        "completion" : {
            "field" : "suggest"
        }
    }
}'


6. На клиенте вешаете обработчик на событие ввода букв в input и дергаете ваш контроллер ajax'ом

7. Полученный ответ рендерите как предложение ввода

8. Профит
Ответ написан
@PyTiMa
Учусь, кручусь, верчусь.
Кажется тут сокеты помогут. Но я не профи, послушаю опытных)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
30 мар. 2020, в 19:06
500 руб./за проект
30 мар. 2020, в 19:05
2000 руб./за проект
30 мар. 2020, в 19:04
5000 руб./за проект