Когда я выполняю простой поисковый запрос по электронной почте, он ничего мне не возвращает, если я не удаляю то, что следует за «@», почему?
Я хочу делать запросы на электронные письма внечёткость и автозаполнение.
ИНФОРМАЦИЯ ОБ ЭЛЕКТРИЧЕСКОМ ПОИСКЕ:
{
"name" : "ZZZ",
"cluster_name" : "YYY",
"cluster_uuid" : "XXX",
"version" : {
"number" : "6.5.2",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "WWW",
"build_date" : "2018-11-29T23:58:20.891072Z",
"build_snapshot" : false,
"lucene_version" : "7.5.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
MAPPING:
PUT users
{
"mappings":
{
"_doc": { "properties": { "mail": { "type": "text" } } }
}
}
ВСЕ ДАННЫЕ:
[
{ "mail": "firstname.lastname@company.com" },
{ "mail": "john.doe@company.com" }
]
QUERY WORKS:
Срок запроса работает, но mail == "firstname.lastname@company.com"
, а не "firstname.lastname" ...
QUERY :
GET users/_search
{ "query": { "term": { "mail": "firstname.lastname" } }}
RETURN :
{
"took": 7,
"timed_out": false,
"_shards": { "total": 6, "successful": 6, "skipped": 0, "failed": 0 },
"hits": {
"total": 1,
"max_score": 4.336203,
"hits": [
{
"_index": "users",
"_type": "_doc",
"_id": "H1dQ4WgBypYasGfnnXXI",
"_score": 4.336203,
"_source": {
"mail": "firstname.lastname@company.com"
}
}
]
}
}
ЗАПРОС НЕ РАБОТАЕТ:
QUERY :
GET users/_search
{ "query": { "term": { "mail": "firstname.lastname@company.com" } }}
RETURN :
{
"took": 0,
"timed_out": false,
"_shards": { "total": 6, "successful": 6, "skipped": 0, "failed": 0 },
"hits": {
"total": 0,
"max_score": null,
"hits": []
}
}
РЕШЕНИЕ:
Изменить отображение (переиндексировать после изменения отображения) с помощью uax_url_email
анализатор для писем.
PUT users
{
"settings":
{
"index": { "analysis": { "analyzer": { "mail": { "tokenizer":"uax_url_email" } } } }
}
"mappings":
{
"_doc": { "properties": { "mail": { "type": "text", "analyzer":"mail" } } }
}
}