elasticsearch Elasticsearch查询通过电子邮件查询时不返回结果,elasticsearch,kibana,elasticsearch,Kibana" /> elasticsearch Elasticsearch查询通过电子邮件查询时不返回结果,elasticsearch,kibana,elasticsearch,Kibana" />

elasticsearch Elasticsearch查询通过电子邮件查询时不返回结果

elasticsearch Elasticsearch查询通过电子邮件查询时不返回结果,elasticsearch,kibana,elasticsearch,Kibana,在elasticsearch索引中,我有一个名为reporter的字段,运行此查询时没有得到任何结果: GET /index/_search { "query": { "bool": { "must": [ { "match": { "reporter": "Andr" } } ] } } } 但是,如果我将值更

在elasticsearch索引中,我有一个名为
reporter
的字段,运行此查询时没有得到任何结果:

GET /index/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "reporter": "Andr" } }
      ]
    }
  }
}
但是,如果我将值更改为全名“Andre”,则会得到许多结果。如果
reporter
字段包含“A”、“An”、“And”、“Andr”等,如何返回记录。?只有当值与电子邮件中的句点之间的完整字符串匹配时,我才会得到结果

以下是分析设置:

{
   "analysis": {
      "filter": {
         "email": {
            "type": "pattern_capture",
            "preserve_original": true,
            "patterns": [
               "([^@]+)",
               "(\\p{L}+)",
               "(\\d+)",
               "@(.+)",
               "([^-@]+)"
            ]
         }
      },
      "analyzer": {
         "email": {
            "tokenizer": "uax_url_email",
            "filter": [
               "email",
               "lowercase",
               "unique"
            ]
         }
      }
   }
}
下面是
报告程序
映射:

"reporter": {
    "type": "text",
    "analyzer": "email"
}

Edge N-gram过滤器可以帮助解决您的用例。它基本上从令牌开始输出n克。可以通过设置“最小值”和“最大值”字段来控制n克。我们可以使用下面的过滤器设置来输出上述示例所需的内容

"filter": [
    { "type": "edge_ngram",
      "min_gram": 1
    }
  ] 
更多详细信息可在此链接中找到


所以我会使用该过滤器而不是电子邮件过滤器?或者除此之外?取决于您的用例。但在这两种情况下都应该有效