无法为 ElasticSearch 编写通配符查询?

Ayu*_*mar 2 wildcard match elasticsearch

我在使用通配符时遇到问题。每当我尝试使用通配符查找数据时,它都会返回错误

ES中的数据集如下所示:

   "hits": {
      "total": 1000,
      "max_score": 1,
      "hits": [
         {
            "_index": "accounts",
            "_type": "data",
            "_id": "25",
            "_score": 1,
            "_source": {
               "account_number": 25,
               "balance": 40540,
               "firstname": "Virginia",
               "lastname": "Ayala",
               "age": 39,
               "gender": "F",
               "address": "171 Putnam Avenue",
               "employer": "Filodyne",
               "email": "virginiaayala@filodyne.com",
               "city": "Nicholson",
               "state": "PA"
            }
         }
Run Code Online (Sandbox Code Playgroud)

我使用以下查询:

GET /_search
{
    "query":{       
    "filtered" : {
      "filter" : {
        "bool" : {
          "should" :
          {
            "match":{
            "wildcard":{"lastname" : "Aya*" }
            }
          }      
        }
      }
    }
    }
}
Run Code Online (Sandbox Code Playgroud)

但它抛出以下错误:

{
   "error": {
      "root_cause": [
         {
            "type": "query_parsing_exception",
            "reason": "[match] query does not support [lastname]",
            "index": "accounts",
            "line": 9,
            "col": 25
         }
Run Code Online (Sandbox Code Playgroud)

我尝试在查询中仅使用通配符不使用匹配实例,但仍然无法获取数据。这里搜索成功但是没有返回数据。

没有匹配查询:

GET /_search
{
    "query":{       
    "filtered" : {
      "filter" : {
        "bool" : {
          "should" :
          {
            "wildcard":{"lastname" : "Aya*" }
          }      
        }
      }
    }
    }
}
Run Code Online (Sandbox Code Playgroud)

请帮助我了解我应该如何设置查询。我也必须在 JAVA API 中使用这个查询字符串。因此,在这方面的任何建议也将非常有帮助。

tyl*_*ein 6

这对我有用:

GET /_search
{
  "query": {
    "wildcard": {
      "lastname": "aya*"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我已经在这上面浪费了很多时间,直到我在网上阅读了这篇文章:

...if you search a not_analyzed field and use wildcards, you MUST NOT include any capital letters in your query...
Run Code Online (Sandbox Code Playgroud)

它一直没有工作,因为我正在寻找例如Aya*. 一旦我将它转换为小写,aya*它就起作用了。