Elasti c результаты поиска документов, основанных на том, насколько близко числовая строка - PullRequest
0 голосов
/ 08 февраля 2020

Предполагается, что у нас есть документы со следующим форматом в формате 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"
}

1 Ответ

1 голос
/ 08 февраля 2020

Запрос script_score позволяет реализовать пользовательские логи скоринга c (см. Справочник Elasticsearch: Запрос оценки скрипта ). Вместо того, чтобы реализовывать свой собственный скрипт, вы также можете использовать одну из предопределенных функций затухания для полей чисел c, предполагая, что вы "очистили" номера улиц от символов (вы можете преобразовать number в мультиполе и храните его часть c отдельно, например, number.numeric)

В предыдущих версиях Elasticsearch вы могли использовать запрос function_score для реализации того же лога c (см. ссылку на Elasticsearch: Запрос оценки функции ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...