elasticsearch Elasticsearch按浮点排序的顺序看起来错误
我在每个文档中都有一个字段,其中包含一个浮动,这意味着可以作为对文档进行排序的备用方法。因为它是一个浮点数,所以可以是负数。当我要求Elasticsearch搜索elasticsearch Elasticsearch按浮点排序的顺序看起来错误,elasticsearch,lucene,elasticsearch,Lucene,我在每个文档中都有一个字段,其中包含一个浮动,这意味着可以作为对文档进行排序的备用方法。因为它是一个浮点数,所以可以是负数。当我要求Elasticsearch搜索“order”:“desc”时,我首先得到最大的负值,然后是较小的负值。这是错误的,好像这个标志被忽略了,这根本不是我想要的 "popRank": { "unmapped_type": "float", "order": "desc" } 文档的部分如下所示: "popRank": -310, 如果查询使用desc我
“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"
}
}
}
}
}
}
然后,我们在整个频谱中添加一些具有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
,这就是您的案例中所发生的情况。似乎是一种字典排序检查映射是popRank
类型float
或string
?popRank映射为字符串是正确的。它使用Spark使用Map[String,Any]写入索引。地图的一部分是“popRank”->n,其中n是一个浮点。使用rdd[Map[String,Any]].saveToEs(esIndexURI,Map(“ES.mapping.id”->“id”)
部分“ES.mapping.id”->“id”告诉ES使用“id”rdd'MAP``中的关联作为doc-id。有没有办法将popRank映射到float,我认为这可以通过反射来确定,但可能不是。我真的很感激您准确地解决了这个问题。我会将此标记为答案,但我看不到上面的解决方案。如何使用rdd.saveas(索引,映射)
我可以将popRank映射到Float吗?我认为最后一点是在创建索引时创建字段到类型的映射。然后一切都很好,谢谢,很高兴你找到了答案。最好是在创建索引时创建映射,然后你就会一直很好。
curl -XPOST localhost:9200/test/test/_search -d '{
"sort": {
"popRank": {
"unmapped_type": "float",
"order": "desc"
}
},
"query": {"match_all": {}}
}'