У меня возникли проблемы с созданием адресного поискового запроса в ElasticSearch.Elasticsearch многопользовательский запрос
Адрес хранится в ES со следующей структурой:
Адрес { улица, города, почтовый индекс }
А вот пример запроса:
GET /adr-address/_search
{
"query": {
"multi_match": {
"query": "mainstreet, houston",
"type": "most_fields",
"fields": [ "street", "city", "zipcode"]
}
}
}
"hits": [
{
"_source": {
"id": "S6v4xyO8UE5NRcWtmMATPQ==",
"street": "Houston 2nd Avenue",
"zipcode": "8032",
"city": "Houston"
}
},
{
"_source": {
"id": "aLgQFrO8zCT8m88lAnYZPQ==",
"street": "Houston 1st Avenue",
"zipcode": "8044",
"city": "Houston"
}
},
{
"_source": {
"id": "aLgQFrO8zCT8m88lAnYZPQ==",
"street": "mainstreet",
"zipcode": "8044",
"city": "Houston"
}
},
Мульти матч запрос работает отлично в большинстве случаев, за исключением сценария, когда улица содержит название города. Elasticsearch уделяет более высокий приоритет этим результатам, что вполне понятно, хотя и неприемлемо.
Вот результат _analyze:
GET /adr-address/_validate/query?explain
{
"query": {
"multi_match": {
"query": "mainstreet, houston",
"type": "most_fields",
"fields": [ "street", "city", "zipcode" ]
}
}
}
{
"valid": true,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"explanations": [
{
"index": "adr-address",
"valid": true,
"explanation": "(zipcode:mainstreet zipcode:houston) (street:mainstreet street:houston) (city:mainstreet city:houston)"
}
]
}
Следует отметить, что Google Maps API возвращает точные результаты для того же самого запроса.
Предположения/условия сделали до сих пор:
- Tokenizers являются: пробел, запятая, цифры и т.д.
- Входной термин может содержать мульти название слово улица, почтовый индекс или город в любом порядке
Любое предложение о том, как я могу улучшить поиск повторно?
Я не знаю, но вы пытались изменить порядок: [ "город", "почтовый индекс", "улица"]? –
Да, но это не помогло, а также объяснение _analyze показывает, что он ищет все термины в обоих полях – shailendher
Я предполагаю, что опция copy_to - это то, что мне нужно. Скопируйте все значения в новое поле и выполните поиск там. https://www.elastic.co/guide/en/elasticsearch/guide/current/field-centric.html Я должен знать, будет ли это работать завтра. – shailendher