我试图使用术语过滤器在数组列表中找到确切的标记名,例如。

   tag_names: ["tea", "green tea"]

我用
{"filter": {"term": {"tag_names": "green tea"}}}

它给我一个错误的结果。我搜索了很多链接,只是找到了与数组列表完全匹配的解决方案(但没有空格)。

最佳答案

如果要搜索准确的术语,请确保要搜索的字段是not_analyzedTerm Query适用于not_analyzed字段。

如果您的字段是analyzed,则术语green tea将被标记为两个术语greentea。在这种情况下,您可能需要使用match queryquery_string查询。

{
"query": {
   "query_string": {
      "default_field": "tag_names",
      "query": "green tea"
    }
  }
}

关于analyzednon anlyzed here的研究

您可以使用以下命令查看tag_names字段是analyzed还是not_analyzed
GET /index/type/_mapping

10-06 10:49