我在每个文档中都有一个包含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
,这似乎是在你的情况下发生的。