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

x33g5p2x  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(1)|浏览(363)

在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 Map:

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

vx6bjr1n1#

边n-gram过滤器可以帮助解决您的用例。它基本上从令牌的开头输出n-grams。可以通过设置“min\u gram”和“max\u gram”字段来控制n gram。我们可以使用下面的过滤器设置来输出上述示例所需的内容。

"filter": [
    { "type": "edge_ngram",
      "min_gram": 1
    }
  ]

更多细节可以在这个链接中找到
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-edgengram-tokenfilter.html

相关问题