当前位置: 首页 > 知识库问答 >
问题:

Elasticsearchstored_fields顺序

荣轶
2023-03-14

我在Elasticsearch的stored_fields中遇到了一个顺序特性。基本上,stored_fields不是按照我在请求中指定的顺序检索的。例如,我使用三个字段创建以下索引,并以特定顺序请求字段:

PUT /test_field_order
{
  "mappings": {
    "properties": {
      "field1": { "type": "text", "store": true},
      "field2": { "type": "text", "store": true},
      "field3": { "type": "text", "store": true}
    }
  }
}

PUT /test_field_order/_doc/1
{
  "field1": "field1",
  "field2": "field2",
  "field3": "field3"
}

GET test_field_order/_search
{
  "query": {
    "match": {
      "_id": 1
    }
  },
  "stored_fields": ["field3", "field1", "field2"]
}

在Kibana上运行后,将检索以下内容:

{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "test_field_order",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "fields" : {
          "field1" : [
            "field1"
          ],
          "field3" : [
            "field3"
          ],
          "field2" : [
            "field2"
          ]
        }
      }
    ]
  }
}

如您所见,检索stored_fields的顺序是[field d1, field d3, field d2]。这与请求的顺序[field d3, field d1, field d2]不匹配。此外,它也与索引顺序[field d1, field d2, field d3]不匹配。检索顺序是如何确定的?Elasticsearch是否保证stored_fields的顺序与请求中字段的顺序匹配?我找不到任何关于排序的规范。

共有1个答案

罗星洲
2023-03-14

不能对Json字段排序。这里很好地解释了JSON顺序和规范

 类似资料:
  • 主要内容:顺序表的初始化顺序表,全名 顺序存储结构,是 线性表的一种。通过《 什么是线性表》一节的学习我们知道,线性表用于存储逻辑关系为“一对一”的数据,顺序表自然也不例外。 不仅如此,顺序表对数据的物理存储结构也有要求。 顺序表存储数据时,会提前申请一整块足够大小的物理空间,然后将数据依次存储起来,存储时做到数据元素之间不留一丝缝隙。 例如,使用顺序表存储集合  ,数据最终的存储状态如图 1 所示: 图 1 顺序存储结

  • Introduction This is the sixth part of the chapter which describes synchronization primitives) in the Linux kernel and in the previous parts we finished to consider different readers-writer lock synch

  • 问题内容: 如何以相同的顺序获取HTML表单中的所有parameterNames。 即,如果表单包含…。FirstName,LastName,MiddleName和Age。输出应该以相同的顺序出现 我尝试使用以下内容,但这会改变输出的顺序: 问题答案: 我认为HTTP规范中没有任何内容可以强制浏览器按照它们在表单中出现的顺序发送参数。您可以通过在参数名称前添加数字来解决此问题,例如: 之后,您基本

  • 书写顺序 1. 不强制要求声明的书写顺序。 如果团队规范有要求,建议使用工具来自动化排序,比如 CSScomb,或者使用 @wangjeaf 开发的 ckstyle 推荐以声明的特性作为分组,不同分组间保留一个空行,例如: .dialog { /* 定位 */ margin: auto; position: absolute; top: 0; bottom: 0; righ

  • flex order 排序,一般情况下浏览器会把元素从左到右或者从上到下排列,如果我们想要更改它们的排列顺序该如何做呢?使用order就可以轻松的修改。数字越大越往后,数字越小越在前。 1. 官方定义 order 属性设置或检索弹性盒模型对象的子元素出现的順序。 2. 解释 子元素可以通过设置 order 数值的大小来设定在页面中出现的顺序,数值小的在前,数值大的在后。 3. 语法 .item-c

  • 顺序结构 #include <stdio.h> #include <stdlib.h> int main01(void) { printf("%d \n", 1);//顺序结构,从上往下执行,从main函数开始 printf("%d \n", 11); printf("%d \n", 111); printf("%d \n", 1111); sys