Я довольно новичок в ElasticSearch. Я пробовал большинство учебников и посмотрел на форуме, но я не могу найти хорошее решение.
В качестве обходного пути я кормлю с использованием R и эластичного пакета, а Elastic API соединяется с помощью Laravel / PHP.
Я пытаюсь создать индекс геокодирования со всеми адресами во Франции, чтобы:
1) автозаполнение адреса
2) адрес геокода
После многих тестов я выбрал nGram
, потому что из-за многих проблем при обработке комбинированного запроса текста и цифр с другими или у меня не было ожидаемого поведения или результатов.
Моя проблема в том, что завершение завершается неудачно для длинного запроса или недостаточно терпимо.
Допустим, в автозаполнении я хочу выбрать "11, rue de douai 75009 Paris".
Я получу его со следующими запросами:
11, rue de d
rue de douai
Но следующие запросы не будут иметь результатов:
11 доуай
11, Рю де До
rue de douai 75
rue de douai 11
за 11 улиц Фобура
11 rue du works
11 rue du f не работает без результата
Рю дю Фобур работает
rue du faubourg p не работает без результата
Фобургские работы писателя
faubourg poissionere не работает без результатов
Моя конфигурация индекса следующая
"settings": {
"analysis": {
"analyzer": {
"completion_analyzer": {
"type": "custom",
"filter": [
"lowercase",
"asciifolding",
"trim",
"completion_filter"
],
"tokenizer": "keyword"
}
},
"filter": {
"completion_filter": {
"type": "nGram",
"min_gram": 2,
"max_gram": 20,
"token_chars": [ "letter", "digit", "punctuation" ]
}
}
}
},
"mappings": {
"geocoding": {
"properties": {
"numero": {
"type": "long"
},
"nom_voie": {
"type": "text"
},
"ville": {
"type": "text"
},
"code_postal": {
"type": "text"
},
"code_insee": {
"type": "text"
},
"lon": {
"type": "float"
},
"lat": {
"type": "float"
},
"full_address": {
"type": "text"
},
"address_suggest": {
"type": "completion",
"max_input_length" : 150,
"analyzer": "completion_analyzer",
"search_analyzer": "standard",
"preserve_position_increments": false
}
}
}
}
}
Я вставил данные следующим образом:
<code>
{
"numero" : 11,
"nom_voie" : "rue du faubourg poissonière",
"code_postal" : "75008",
"code_insee" : "75108",
"ville" : "PARIS",
"lon" : 2.37352,
"lat" : 48.85759,
"full_address" : "11, rue du faubourg poissonière 75008 PARIS",
"address_suggest" : "11 rue du faubourg poissonière 75008 PARIS",
"weight" : 2,
}
Запрос сделан следующим образом:
<code>
{
"_source" : "full_address",
"suggest" : {
"text" : query,
"completion" : {
"field" : "address_suggest",
"size" : 5,
"skip_duplicates" : TRUE,
"fuzzy" : {
"fuzziness" : 5
}
}
}
}