@germanrus1

Аналог sql запроса LIKE% для ElasticSearch?

Не могу создать ElasticSearch запрос аналогичный SQl:
SELECT * FROM store WHERE name LIKE 'сбер%'.

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

Узнал, что у ES есть sql транслятор запросов, но чет тоже не помогло. Вот оставлю curl запрос в терминале:
curl -X POST "localhost:9200/_sql/translate" -H 'Content-Type: application/json' -d' { "query": "SELECT * FROM coupon WHERE cp_name LIKE '"'"'tion%'"'"'", "fetch_size": 10 } '

{"error":{"root_cause":[{"type":"verification_exception","reason":"Found 1 problem\nline 1:28: [cp_name LIKE 'tion%'] cannot operate on field of data type [text]: No keyword/multi-field defined exact matches for
 [cp_name]; define one or use MATCH/QUERY instead"}],"type":"verification_exception","reason":"Found 1 problem\nline 1:28: [cp_name LIKE 'tion%'] cannot operate on field of data type [text]: No keyword/multi-fie
ld defined exact matches for [cp_name]; define one or use MATCH/QUERY instead"},"status":400}
  • Вопрос задан
  • 246 просмотров
Пригласить эксперта
Ответы на вопрос 3
akelsey
@akelsey
Начать смотреть можно с wildcard query.
Ответ написан
ThunderCat
@ThunderCat
{PHP, MySql, HTML, JS, CSS} developer
SELECT * FROM store WHERE LIKE 'сбер%'
Это по тому что у вас и с SQL не все норм. Хинт - между WHERE и LIKE пропущена важная составляющая.

UPD: Судя по ошибке у вас там индекс на фултекст, по этому вместо лайк должно быть что-то типа MATCH(cp_name, 'сбер', 'fuzziness=AUTO:1,5')
Ответ написан
Revencu
@Revencu
{
  "query": {
     "match_phrase_prefix": {
        "cp_name": {
          "query": "сбер"
        }
     }
  }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы