当字段名称未知时,如何以弹性方式编写搜索查询

时间:2017-04-20 20:54:06

标签: elasticsearch

enter image description here

我想使用弹性搜索来查询匹配值为" dc883c6f24776ad6ce1f86c41b5cf87cfb784e85"的文档。

请查看图像中附带的源文档的结构。当我们不知道字段名称时,是否可以使用* [wild char]查询此类内容。

 "query" : {
    "constant_score" : {
        "filter" : {
            "terms" : { 
                "commitId.persistence-statics-service.*":["dc883c6f24776ad6ce1f86c41b5cf87cfb784e85"]
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

您可以使用query_stringmulti_match在字段名称部分中指定通配符。我认为multi_match更简单:

{
  "query": {
    "constant_score": {
      "filter": {
        "multi_match": {
          "query": "dc883c6f24776ad6ce1f86c41b5cf87cfb784e85",
          "fields": [
            "commitId.persistence-statics-service.*"
          ],
          "analyzer": "keyword"
        }
      }
    }
  }
}

答案 1 :(得分:0)

尝试使用query_string。它在ES中的部分搜索功能非常强大,请查看我的答案link: -

{
  "query": {
    "query_string": {
       "fields" : ["commitId.persistence-statics-service.*"] ,
      "query": "*dc883c6f24776ad6ce1f86c41b5cf87cfb784e85*"
    }
  }
}

Query_string比multi_match link2

更强大