То, что я пытаюсь сделать, это использовать ElasticSearch, чтобы сделать обратные адреса, которые похожи на один адрес.Скажи кому-нибудь вход "123 Main St."но у данных есть «123 ГЛАВНАЯ УЛИЦА ЮГ», они возвращали бы это как частичное совпадение.
Итак, у меня есть следующие настройки в моем поле улицы в ElasticSearch:
{
"mappings": {
"addresses": {
"properties": {
"street1": {
"type": "string",
"analyzer": "street_analyzer"
}
}
}
},
"settings": {
"index": {
"analysis": {
"analyzer" : {
"street_analyzer" : {
"type": "custom",
"tokenizer": "standard",
"filter": ["standard", "lowercase", "street_filter_synonym", "street_filter_stop", "stop", "street_filter_shingle"]
}
},
"filter": {
"street_filter_synonym": {
"type" : "synonym",
"ignore_case": true,
"synonyms" : []
},
"street_filter_stop" : {
"type" : "stop",
"ignore_case": true,
"stopwords": []
},
"street_filter_shingle": {
"type" : "shingle",
"output_unigrams" : true,
"min_shingle_size" : 2,
"max_shingle_size" : 5
}
}
}
}
}
}
И япытаясь выполнить поиск в этом поле следующим образом:
{
"query": {
"match": {
"street1": {
"query": "436 5TH AVE",
"fuzziness": "AUTO",
"operator": "and",
"analyzer":"street_analyzer"
}
}
}
}
Я получаю совпадение, но если я делаю такой же поиск с "436 5-й AVE SOUTH", я не получаю.Я думал, что из-за совпадения он будет совпадать по частям, так как он маркирует и индексированное поле, и строку запроса, но это не так.
Как можно взять одну входную строку и сопоставитьверсия с галькой, игнорируя те поля, которых там нет?