gpt4 book ai didi

Elasticsearch 按 float 排序顺序看起来不对

转载 作者:行者123 更新时间:2023-11-29 02:54:41 25 4
gpt4 key购买 nike

我在每个包含 Float 的文档中都有一个字段,这意味着作为订购文档的后备方式。因为它是一个 float ,所以它可以是负数。当我要求 Elasticsearch "order": "desc" 时,我首先得到最大的负值,然后是较小的负值。这是错误的,就好像这个标志被忽略了,这根本不是我想要的。

"popRank": {
"unmapped_type": "float",
"order": "desc"
}

文档的部分如下所示:

"popRank": -310,

如果查询使用 desc,我首先得到 -310,然后是 -157。不完全确定当有正数时会发生什么,因为在这个小测试数据集中没有任何正数。

最佳答案

首先,您需要确保您的 popRank 字段被映射为 float 而不是 string

curl -XGET localhost:9200/your_index/_mapping/your_type?fields=popRank

应该返回给你这个:

{
"your_index" : {
"mappings" : {
"your_type" : {
"properties" : {
"popRank" : {
"type" : "float" <---- "float" MUST appear here and NOT "string"
}
}
}
}
}
}

我们可以像这样非常简单地测试浮点排序。首先,让我们创建一个测试索引:

curl -XPOST localhost:9200/test -d '{
"mappings": {
"test": {
"properties": {
"popRank": {
"type": "float"
}
}
}
}
}'

然后我们在整个频谱中添加一些具有popRank的文档。

curl -XPOST localhost:9200/test/test/_bulk -d '
{"index": {"_id": 1}}
{"popRank": 123}
{"index": {"_id": 2}}
{"popRank": -157}
{"index": {"_id": 3}}
{"popRank": 1234}
{"index": {"_id": 4}}
{"popRank": 0}
{"index": {"_id": 5}}
{"popRank": -310}
{"index": {"_id": 6}}
{"popRank": 332}
{"index": {"_id": 7}}
{"popRank": -10}
'

最后,我们可以用

curl -XPOST localhost:9200/test/test/_search -d '{
"sort": {
"popRank": {
"unmapped_type": "float",
"order": "desc"
}
},
"query": {"match_all": {}}
}'

在结果中,我看到所有文档都按 popRank 正确排序,即 1234、332、123、0、-10、-157、-310

因此请确保您的 popRank 字段首先没有被索引为 string,因为如果是这种情况,上面的示例文档将被排序如下:332, -310, -157, 1234, 123, -10, 0,这似乎是您的情况。

关于Elasticsearch 按 float 排序顺序看起来不对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32149420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com