Предполагается, что у нас есть документы со следующим форматом в формате elasti c indexed:
{
"street": "Adenauer Allee",
"number": "119",
"zipcode": "53113"
}
, и у нас есть запрос вроде:
{
"from": 0,
"size": 1,
"query": {
"bool": {
"must": [
{
"match": {
"zipcode": {
"query": "53113",
"fuzziness": "0"
}
}
},
{
"match": {
"street": {
"query": "Adenauer Allee",
"fuzziness": "auto"
}
}
}
],
"should": [
{
"match": {
"number": {
"query": "119"
}
}
}
]
}
}
}
Теперь предположим, что наш индекс содержит 3 документа с
street: "Adenauer Allee"
zipcode: "53113"
с разными номерами домов, например:
doc1: number: "11"
doc2: number: "120"
doc3: number: "10a"
(обратите внимание на «a» в doc3).
Вышеприведенный запрос вернется в результате doc1 с номером "11" (так как это ближе к алфавиту).
Желаемое поведение - сначала вернуть документ с ближайшим числовым значением. В приведенном выше сценарии это doc2 с номером "120".
Как этого добиться?
Elasti c Информация о поиске:
{
"name": "193a315bccae",
"cluster_name": "demo",
"cluster_uuid": "kg3tZZOyqOgqTbn_elqs_g",
"version": {
"number": "7.5.1",
"build_flavor": "default",
"build_type": "docker",
"build_hash": "3ae9ac9a93c95bd0cdc054951cf95d88e1e18d96",
"build_date": "2019-12-16T22:57:37.835892Z",
"build_snapshot": false,
"lucene_version": "8.3.0",
"minimum_wire_compatibility_version": "6.8.0",
"minimum_index_compatibility_version": "6.0.0-beta1"
},
"tagline": "You Know, for Search"
}