Elasticsearch массив содержит хотя бы один элемент - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь использоватьasticsearch для поиска рецептов по тегам

{
  ...
  "tag": [
      "cool",
      "cooler"
  ]
},
{
  ...
  "tag": [
      "cool",
      "hard"
  ]
},
{
  ...
  "tag": [
      "coolest",
      "hardest"
  ]
},

Я хочу найти все сущности, которые содержат точно "крутой" тег

Что я пробовал:

GET /recipes/_search
{
  "query": {
    "terms": {
      "tag": ["cool"]
    }
  }
}

Ничего не вернуть

GET /recipes/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "tag": "cool"
          }
        }
      ]
    }
  }
}

Ничего не вернуть

GET /recipes/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "tag": "cool"
          }
        }
      ]
    }
  }
}

Вернуть все сущности

Как получить только те элементы, которые содержат "круто" ивозможно, другие значения, но правило состоит в том, что тег должен существовать в массиве тегов

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Это решение с использованием скриптового запроса скриптового запроса

GET /recipes/_search
{
  "query": {
    "bool": {
      "must": {
        "script": {
          "script": {
            "source": "doc['tag'] instanceof List && doc['tag'][0].contains('cool')"
          }
        }
      }
    }
  }
}
0 голосов
/ 23 октября 2018
GET /recipes/_search
{
   "query": {
      "bool":{
         "should":[
            {"wildcard" : { "tag" : "cool*" } }
            ]

     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...