查询数组仅适用于第一个元素

时间:2018-04-13 14:24:32

标签: elasticsearch

我在搜索文档中数组中的项目时遇到问题;在我的案例中,一个简单的标记系统。我有一个相对简单的文件代表食谱。这是索引中数据的截断版本:

{
   "_index" : "recipes",
  "_type" : "recipe",
  "_id" : "37",
  "_version" : 1,
  "found" : true,
  "_source" : {
    "id" : 37,
    "title" : "Crab Cakes",
    "tags" : [
      "seafood",
      "appetizer"
    ]
  }
}

当我搜索标签seafood时,它与此配方相匹配。但是,当我搜索标签appetizer时,我什么都没得到。这是一个非常基本的开胃菜查询的解释:

curl -XGET 'http://localhost:9200/recipes/recipe/37/_explain?pretty' -H 'Content-Type: application/json' -d'{"query":{"term":{"tags":"appetizer"}}}'

结果如下:

{
  "_index" : "recipes",
  "_type" : "recipe",
  "_id" : "37",
  "matched" : false,
  "explanation" : {
    "value" : 0.0,
    "description" : "no matching term",
    "details" : [ ]
  }
}

1 个答案:

答案 0 :(得分:0)

来自sramalingam24的评论中提供了正确答案。将查询更改为match而不是term

[更新]

我还测试了将tags切换为keyword字段并且也可以。这是我最终的解决方案。