Elasticsearch一个数组包含至少一个元素

时间:2018-10-23 14:34:25

标签: elasticsearch

我正在尝试通过标签使用Elasticsearch搜索食谱

{
  ...
  "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"
          }
        }
      ]
    }
  }
}

返回所有实体

我如何只检索确实包含“ cool”以及可能包含其他值的项目,但规则是标签必须存在于标签数组中

2 个答案:

答案 0 :(得分:0)

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

     }
}

答案 1 :(得分:0)

此解决方案使用脚本查询script query

GET /recipes/_search
{
  "query": {
    "bool": {
      "must": {
        "script": {
          "script": {
            "source": "doc['tag'] instanceof List && doc['tag'][0].contains('cool')"
          }
        }
      }
    }
  }
}