У меня есть большая база данных имен, в основном из Шотландии. В настоящее время мы создаем прототип для замены существующего программного обеспечения, которое выполняет поиск. Это все еще в производстве, и мы стремимся как можно более точно завершить наши результаты к текущим результатам одного и того же поиска.ElasticSearch - Поиск человеческих имен
Я надеялся, что кто-то может помочь мне, я вхожу в поиск в Elastic Search, запрос «Michael Heaney», я получаю некоторые дикие результаты. Текущий поиск возвращает две основные фамилии: «Heaney» и «Heavey» все с именем «Michael», я могу получить результаты «Heaney» в Elastic Search, но я не могу получить «Heavey» и ES также возвращает людей без фамилии «Майкл», однако я ценю, что это связано с тем, что он является частью нечеткого запроса. Я знаю, что это узкий прецедент, так как это только один поиск, но получение этого результата и знание того, как я могу его получить, помогут.
Спасибо.
Mapping
{
"jr": {
"_all": {
"enabled": true,
"index_analyzer": "index_analyzer",
"search_analyzer": "search_analyzer"
},
"properties": {
"pty_forename": {
"type": "string",
"index": "analyzed",
"boost": 2,
"index_analyzer": "index_analyzer",
"search_analyzer": "search_analyzer",
"store": "yes"
},
"pty_full_name": {
"type": "string",
"index": "analyzed",
"boost": 4,
"index_analyzer": "index_analyzer",
"search_analyzer": "search_analyzer",
"store": "yes"
},
"pty_surname": {
"type": "string",
"index": "analyzed",
"boost": 4,
"index_analyzer": "index_analyzer",
"search_analyzer": "search_analyzer",
"store": "yes"
}
}
}
}'
Настройки Указатель
{
"settings": {
"number_of_shards": 2,
"number_of_replicas": 0,
"analysis": {
"analyzer": {
"index_analyzer": {
"tokenizer": "standard",
"filter": [
"standard",
"my_delimiter",
"lowercase",
"stop",
"asciifolding",
"porter_stem",
"my_metaphone"
]
},
"search_analyzer": {
"tokenizer": "standard",
"filter": [
"standard",
"my_metaphone",
"synonym",
"lowercase",
"stop",
"asciifolding",
"porter_stem"
]
}
},
"filter": {
"synonym": {
"type": "synonym",
"synonyms_path": "synonyms/synonyms.txt"
},
"my_delimiter": {
"type": "word_delimiter",
"generate_word_parts": true,
"catenate_words": false,
"catenate_numbers": false,
"catenate_all": false,
"split_on_case_change": false,
"preserve_original": false,
"split_on_numerics": false,
"stem_english_possessive": false
},
"my_metaphone": {
"type": "phonetic",
"encoder": "metaphone",
"replace": false
}
}
}
}
}'
Fuzzy
{
"from":0, "size":100,
"query": {
"bool": {
"should": [
{
"fuzzy": {
"pty_surname": {
"min_similarity": 0.2,
"value": "Heaney",
"prefix_length": 0,
"boost": 5
}
}
},
{
"fuzzy": {
"pty_forename": {
"min_similarity": 1,
"value": "Michael",
"prefix_length": 0,
"boost": 1
}
}
}
]
}
}
}
Спасибо, Алекс. Позвольте мне разобраться во всей этой информации, и я отчитаю. Ответ выглядит очень тщательно. – Nate
Мы только что опубликовали статью о нечетком поиске, которая может также представлять интерес: https://www.found.no/foundation/fuzzy-search/ –
Заметите это. Большое спасибо за вашу помощь, я многому научился. – Nate