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

elasticsearch 5.2排序ICU插件需要field data=true?

单于骁
2023-03-14

我想使用icu_collation过滤器对elasticsearch结果文档进行排序。所以我有索引设置:

"settings": {
    "analysis": {
      "analyzer": {
        "ducet_sort": {
          "tokenizer": "keyword",
          "filter": [ "icu_collation" ]
        }
      }
    }
  }

和映射

"mappings": {
    "card": {
      "properties": {
        "title": {
          "type": "text",
          "fields": {
            "sort": {
              "type": "text",
              "analyzer": "ducet_sort",
              "index": false
            }
          }
        }
}}}

和查询:

{
      "sort": ["title.sort"]
}

但查询失败:

"caused_by": {
            "type": "illegal_argument_exception",
            "reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [title.sort] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory."
        }

在文档中,建议的排序数据类型为关键字。但数据类型关键字不支持analyzer。此外,不建议使用现场数据:

留档

那么,是否有一种方法可以在elasticsearch中使用一些特定的排序规则对文档进行排序,例如icu_collation而不使用field ddata=true?

非常感谢。

共有1个答案

宋岳
2023-03-14

在Kibana中,从左侧菜单中打开“开发工具”选项,并在根据您的设置进行更新后执行下面的查询。

PUT _mapping/INDEX_NAME?update_all_types
{
  "properties": {
    "FIELD_NAME": {
      "type":     "text",
      "fielddata": true
    }
  }
}

或者根据您的设置,在更新后,通过Curl或类似Cygwin(适用于Windows)的终端执行以下查询。

curl -XPUT http://DOCKER_MACHINE_IP:9200/INDEX_NAME -d '{
  "mappings": {
    "type": {
      "properties": {
        "FIELD_NAME": {
          "type": "text",
          "fielddata": true
        }
      }
    }
  }
}'
 类似资料:
  • A根据排序功能自动对树中的所有同级进行排序。 $.jstree.defaults.sortsort plugin 用于对节点进行排序的设置功能。它在树的上下文中执行,接受两个节点作为参数,并应返回1 或 -1. sort (obj [, deep])sort plugin private 用于对节点的子节点进行排序 objmixed 节点 deepBoolean 如果设置为true节点,则以递归方

  • 该插件根据比较配置选项功能自动排列所有同级节点,默认为字母顺序。 $(function () { $("#plugins5").jstree({ "plugins" : [ "sort" ] }); });

  • 我正在尝试在Elasticsearch 1.4.0中手动安装ICU分析插件。我已经下载了elasticsearch-analysis-icu-2.4.1.jar、lucene-analysers-icu-4.10.2.jar和icu4j-54.1.1.jar。该插件正常出现在控制台中,但当我尝试使用icu_tokenizer时,我得到以下错误: 这个类实际上存在于lucene-analyzers-

  • 问题内容: 如果binarySearch方法要求您先对数组进行排序,然后再将其作为参数传递给方法调用,那么为什么不对binarySearch方法进行排序呢? 问题答案: 二进制搜索的工作原理是假设数组的中间包含数组中的中值。如果未排序,则此假设就没有意义,因为中位数可以在任何地方,并且将数组减半可能意味着您削减了要搜索的数字。 二进制搜索不进行排序本身的原因是因为它不需要…该数组已排序。

  • ICU

    ICU(International Component for Unicode) 是 IBM 与开源组织合作研究 , 基于 "IBM 公共许可证 " 的用于支持软件国际化的开源项目。 ICU 实现了对数字、日期、货币等提供国际化支持,提供了强大的 BIDI 算法,对阿拉伯语和希伯来语等 BiDi 语言提供了完善的支持。 ICU 分为 ICU4J 和 ICU4C,分别对应 Java 和 c/c++

  • 我有什么? 现在我想知道在任务执行之前是否可以使用clean task(常见的构建任务)来清理构建目录。 这背后是有原因的,我想确保每次gradle都应该编译java文件,并且所有.class文件都应该被刷新(这是一些要求) 我试过什么? 我想知道什么? 有没有什么方法可以避免编写包装器任务,并做一些梯度魔术来达到要求?