在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"
}
1条答案
按热度按时间vx6bjr1n1#
边n-gram过滤器可以帮助解决您的用例。它基本上从令牌的开头输出n-grams。可以通过设置“min\u gram”和“max\u gram”字段来控制n gram。我们可以使用下面的过滤器设置来输出上述示例所需的内容。
更多细节可以在这个链接中找到
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-edgengram-tokenfilter.html