0

エラスティック インデックスで次の形式のドキュメントがあるとします。

{
  "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"

(doc3 の「a」に注意してください)。

上記のクエリは、結果として数値「11」のdoc1を返します (英数字的に近いため)。

望ましい動作は、最も近い数値を持つドキュメントを最初に返すことです。上記のシナリオでは、これは番号「120」のdoc2です。

どうすればそれを達成できますか?

エラスティック検索情報:

{
"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"
}
4

1 に答える 1