Проверка по списку в упругом поиске

У меня есть поле со значением в качестве списка. Например

_id = 1
tags = ["IT", "mobile", "OS"]

_id = 2
tags = ["Mac", "fast", "laptop"]

_id = 3
tags = ["IT", "android", "OS"]

У меня есть список, чтобы проверить по полю тега.

sample = ["OS", "opera", "mobile"]

Так что документы с id 1 а также id 3 должно совпадать, когда я запрашиваю теги, используя набор образцов.(Причина id 1 содержит "OS" а также "mobile" а также id 3 conatins "OS".)

Как я могу сделать это при упругом поиске?

2 ответа

Решение

Попробуйте приведенный ниже логический запрос с ключевым словом should.

GET /_search
{
  "query": {
    "bool": {
      "should": [
        { "match": { "tags": "OS" }},
        { "match": { "tags": "opera" }},
        { "match": { "tags": "mobile" }} 
      ]
    }
  }
}

Возможно, важное примечание для дальнейших запросов: если вы планируете выполнять поиск и объект, содержащий ВСЕ 3 значения (но не 2 или только 1 тег), вам обязательно следует сначала прочитать о вложенных объектах в Elasticsearch.

Попробуй это

GET /_search

    {
      "query": {
        "bool": {
          "should": [
            { 
              "terms": 
                { 
                  "tags": ["OS", "opera","mobile"]
                }
            }
          ]
        }
      }
    }
Другие вопросы по тегам