如何在elasticsearch数组列表中查询精确值(带空格)

时间:2016-02-18 09:55:55

标签: arrays elasticsearch

我尝试使用术语过滤器来查找数组列表中的确切标记名称,例如。

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

我用

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

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

3 个答案:

答案 0 :(得分:1)

如果您要搜索确切的字词,请确保您要搜索的字段为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

答案 1 :(得分:0)

试试这个:

GET index/type/_search
{
 "query":{
    "term": {
       "tag_names": {
          "value": "green"
         }
      }
   }  
}

注意:如果您要搜索多个字词,请确保 term 过滤器适用于一个字词,您可以使用 query_string 过滤器。 如果您希望在该索引的映射中进行精确搜索,则必须将该特定字段设置为not_analysed。

如果您在每个文档中单独搜索多个术语,请尝试使用此项..

 GET index/type/_search
 {
      "query":{
          "terms": {
             "tag_names": ["green","tea"]
          }
      }
  }

答案 2 :(得分:0)

试试这个:

{  
    "query": {
        "bool": {
            "must": 
            {
                "match" : {
                    "tag_names" : {
                        "query":"green tea",
                        "operator":"and"
                    }
                }
            }
        }

    }

}