Elasticsearch uri按字段名排序

时间:2018-02-21 12:35:45

标签: sorting hadoop elasticsearch elasticsearch-plugin

如何通过查询网址

在ES 5.4版本中订购特定字段
http://localhost:9200/companies/emp/_search?q=*&sort=name:desc

这里我正在搜索emp并按降序显示emp名称。 我得到了例外

Fielddata is disabled on text fields by default. Set fielddata=true on [name] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead."

任何帮助?

3 个答案:

答案 0 :(得分:0)

这是因为您尝试使用“text”类型的字段对数据进行排序。如错误所示,您应该将类​​型从“text”更改为“keyword”或启用fielddata,但我建议您阅读此infohttps://www.elastic.co/guide/en/elasticsearch/reference/current/ fielddata.html在启用之前。

答案 1 :(得分:0)

以下是对fielddata的一个非常好的解释,以及为什么在文本字段上排序不仅仅是开箱即用:https://www.elastic.co/guide/en/elasticsearch/reference/current/fielddata.html

简而言之,文本字段通过分析器运行,这使您可以在搜索结束时获得匹配,但不是完全匹配。例如,从上面发布的链接中,您可以搜索“new”或“york”并找到“New York”的值,因为它已通过分析器运行。

如果您的字段是关键字,则必须搜索完全值才能找到它。

现在,它与排序有什么关系:排序和聚合等操作需要知道字段的精确值才能执行类似的操作。运行分析仪时,将存储分析的值,而不是确切的值。

我建议稍微改变你的映射,以包含这两种类型:

PUT my_index
{
  "mappings": {
    "emp": {
      "properties": {
        "name": { 
          "type": "text",
          "fields": {
            "keyword": { 
              "type": "keyword"
            }
          }
        }
      }
    }
  }
}

答案 2 :(得分:-1)

http://localhost:9200/companies/emp/_search?q= *&安培;排序= name.keyword:降序

您需要在名称

之后添加关键字