elasticsearch - Elasticsearch 分数文档,基于字符串在数字上的接近程度

标签 elasticsearch elasticsearch-7

假设我们有以下格式的 flex 索引文档:

{
  "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”)。

上面的查询将作为结果 doc1 返回数字“11”(因为它在字母数字上更接近)。

期望的行为是首先返回具有最接近数值的文档。
在上述情况下,这是 doc2 ,编号为“120”。

我该如何实现?

flex 搜索信息:
{
"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"
}

最佳答案

script_score -query允许您实现自定义评分逻辑(请参见Elasticsearch引用:Script Score Query)。除了实现自己的脚本之外,还可以对数字字段使用预定义的衰减函数之一,假设您从字符中“清理”了街道编号(可以将number转换为多字段并存储数字部分分开,例如number.numeric)

在Elasticsearch的早期版本中,您可以使用function_score -query来实现相同的逻辑(请参见Elasticsearch引用:Function Score Query)。

关于elasticsearch - Elasticsearch 分数文档,基于字符串在数字上的接近程度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60126471/

相关文章:

regex - 如何正确使用elasticsearch正则表达式查询?

php - 签署 ElasticSearch AWS 调用

java - Elasticsearch : To get all the document id depending on _field in source and update the _field with new data

elasticsearch - Elasticsearch 7 SQL CLI:./x-pack-env:无此类文件或目录错误

elasticsearch - 如何将ElasticSearch查询转换为ES7

elasticsearch - 嵌套聚合:如何获取聚合对象的属性

azure - 在 Web 应用程序中将 Nest Elasticsearch 与 Azure 结合使用

python - elasticsearch-dsl-py 中的 GeoPoint 字段类型

gradle - 无法实例化接口(interface) 'ElasticsearchClient'

ElasticSearch 启动错误——默认发现设置不适合生产使用;