Elasticsearch построить запрос аналогичный SQL (MySql)

354
25 августа 2017, 23:44

Есть запрос:

SELECT * FROM shop_items WHERE (shop_category IS NULL) AND (title NOT LIKE '%Ночник%') AND ((title LIKE '%мышь%') OR (title LIKE '%клавиат%')) AND (description LIKE '%беспровод%') ORDER BY is_top

Ищу по 3 полям: shop_category, title, description

Как построить аналогичный запрос на Elasticsearch?

Answer 1

Если значения полей title и description в индексе разбиты на правильные токены, то можно использовать term. И запрос будет выглядеть примерно так:

{
  "sort" : {
    "is_top" : {"order" : "asc"}
  },
  "query": {
    "bool" : {
      "must" : {
        { "term" : { "description" : "беспровод" } },
        {
          "bool" : {
            "should" : [
              { "term" : { "title" : "мышь" } },
              { "term" : { "title" : "клавиат" } }
            ]
          }
        }
      },
      "must_not" : {
        { "exists" : { "field" : "shop_category" } },
        { "term" : { "title" : "Ночник" } }
      }
    }
  }
}

В противном случае нужно использовать regexp.

Нельзя однозначно составить аналог сложного SQL запроса на Query DSL. Очень разные парадигмы. Elasticsearch не предназначен для LIKE-запросов.

READ ALSO
Работа с ini файлом

Работа с ini файлом

У меня естьini файл

223
Существует ли какой-то аналог Volley в Java?

Существует ли какой-то аналог Volley в Java?

Существует замечательная библиотека Volley, позволяющая сильно упростить работу с сетью при разработке приложений для AndroidВопрос в том, а существует...

212
Как поменять в EditText imeOptins если MaxLInes больше 1?

Как поменять в EditText imeOptins если MaxLInes больше 1?

android:imeOptions не работает, если MaxLines больше 1Я хочу сделать как в Telegram

199
Spring boot runtime @Scheduled cron parameter refresh/reload/reinitializate

Spring boot runtime @Scheduled cron parameter refresh/reload/reinitializate

Мое приложение выполняет задания в заданное время с помощью cronПользователь может изменять свойства файла, состоящие из конфигурации строк...

250