Mam dużą bazę danych nazw, głównie ze Szkocji. Obecnie tworzymy prototyp zastępujący istniejący program, który przeprowadza wyszukiwanie. Nadal jest w fazie produkcyjnej, a naszym celem jest, aby nasze wyniki były jak najbliżej bieżących wyników tego samego wyszukiwania.ElasticSearch - Wyszukiwanie ludzkich nazw
Miałem nadzieję, że ktoś może mi pomóc, wchodzę w poszukiwania Elastic Search, zapytanie brzmi "Michael Heaney", dostaję jakieś dzikie wyniki. Obecne wyszukiwanie zwraca dwa główne nazwiska, są to - "Heaney" i "Heavey" wszystkie z imieniem "Michael", mogę uzyskać wyniki "Heaney" w Elastic Search, ale nie mogę uzyskać "Heavey" i ES zwraca ludzi bez nazwiska "Michael", ale doceniam to, ponieważ jest to część fuzzy zapytania. Wiem, że jest to wąski przypadek użycia, ponieważ jest to tylko jedno wyszukiwanie, ale uzyskanie tego wyniku i wiedza, w jaki sposób mogę go uzyskać, pomoże.
Dzięki.
Mapowanie
{
"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"
}
}
}
}'
Ustawienia indeksu
{
"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
}
}
}
]
}
}
}
Dziękuję, Alex. Pozwól mi opanować wszystkie te informacje i odpowiem. Odpowiedź wygląda bardzo dokładnie. – Nate
Właśnie opublikowaliśmy artykuł dotyczący wyszukiwania rozmytego, który może być również interesujący: https://www.found.no/foundation/fuzzy-search/ –
Założę to. Bardzo dziękuję za pomoc, wiele się nauczyłem. – Nate