elasticsearch Elasticsearch查询通过电子邮件查询时不返回结果
在elasticsearch索引中,我有一个名为elasticsearch Elasticsearch查询通过电子邮件查询时不返回结果,elasticsearch,kibana,elasticsearch,Kibana,在elasticsearch索引中,我有一个名为reporter的字段,运行此查询时没有得到任何结果: GET /index/_search { "query": { "bool": { "must": [ { "match": { "reporter": "Andr" } } ] } } } 但是,如果我将值更
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
}
]
更多详细信息可在此链接中找到
所以我会使用该过滤器而不是电子邮件过滤器?或者除此之外?取决于您的用例。但在这两种情况下都应该有效