【问题标题】:Elasticsearch uri sort by fieldnameElasticsearch uri 按字段名排序
【发布时间】:2018-08-01 01:04:47
【问题描述】:

如何在 ES 5.4 版本中通过查询 url 对特定字段进行排序

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."

有什么帮助吗?

【问题讨论】:

    标签: sorting hadoop elasticsearch elasticsearch-plugin


    【解决方案1】:

    http://localhost:9200/companies/emp/_search?q=*&sort=name.keyword:desc

    名字后面要加关键词

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        这是对 fielddata 的一个很好的解释,以及为什么对文本字段进行排序不能开箱即用:https://www.elastic.co/guide/en/elasticsearch/reference/current/fielddata.html

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

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

        现在,这与排序有何关系:排序和聚合之类的操作需要知道字段的确切值才能对它们执行类似的操作。通过分析器运行时,存储的是分析值,而不是确切值。

        我建议稍微更改您的映射以包含这两种类型:

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

        【讨论】:

        • 感谢wholevinski .. 用于查询网址.. 感谢您的宝贵建议
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-30
        • 2017-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-25
        相关资源
        最近更新 更多