ICU 校对关键字字段编辑

校对用于按特定语言的词序对文档进行排序。icu_collation_keyword 字段类型适用于所有索引,并将直接将术语编码为文档值字段中的字节和单个索引标记,就像标准的 关键字字段 一样。

默认使用 DUCET 校对,这是对语言中立排序的一种最佳尝试。

以下是设置用于按“电话簿”顺序对德语名称进行排序的字段的示例

PUT my-index-000001
{
  "mappings": {
    "properties": {
      "name": {   
        "type": "text",
        "fields": {
          "sort": {  
            "type": "icu_collation_keyword",
            "index": false,
            "language": "de",
            "country": "DE",
            "variant": "@collation=phonebook"
          }
        }
      }
    }
  }
}

GET /my-index-000001/_search 
{
  "query": {
    "match": {
      "name": "Fritz"
    }
  },
  "sort": "name.sort"
}

name 字段使用 standard 分析器,因此支持全文查询。

name.sort 字段是一个 icu_collation_keyword 字段,它将保留名称作为单个标记文档值,并应用德语“电话簿”顺序。

一个示例查询,它搜索 name 字段并按 name.sort 字段排序。

ICU 校对关键字字段的参数编辑

icu_collation_keyword 字段接受以下参数

doc_values

该字段是否应该以列式方式存储在磁盘上,以便以后可以用于排序、聚合或脚本?接受 true(默认)或 false

index

该字段是否应该可搜索?接受 true(默认)或 false

null_value

接受一个字符串值,该值将替换任何显式的 null 值。默认为 null,这意味着该字段被视为缺失。

ignore_above

长度超过 ignore_above 设置的字符串将被忽略。在校对之前对原始字符串执行检查。可以使用 PUT 映射 API 更新现有字段上的 ignore_above 设置。默认情况下,没有限制,所有值都将被索引。

store

字段值是否应该存储并可以与 _source 字段分开检索。接受 truefalse(默认)。

fields

多字段允许以多种方式索引相同的字符串值以用于不同目的,例如一个字段用于搜索,一个多字段用于排序和聚合。

校对选项编辑

strength
强度属性决定了在比较期间被认为是显著差异的最低级别。可能的值为:primarysecondarytertiaryquaternaryidentical。有关每个值的更详细说明,请参阅 ICU 校对文档。默认为 tertiary,除非在校对中另有指定。
decomposition
可能的值:no(默认,但取决于校对)或 canonical。将此分解属性设置为 canonical 允许校对器正确处理未规范化的文本,产生与文本已规范化相同的结果。如果设置了 no,则用户有责任确保在比较或获取校对键之前所有文本都已采用适当的形式。调整分解模式允许用户在更快和更完整的校对行为之间进行选择。由于世界上很多语言不需要文本规范化,因此大多数语言环境都将 no 设置为默认分解模式。

以下选项仅供专家使用

alternate
可能的值:shiftednon-ignorable。将强度 quaternary 的备用处理设置为移位或不可忽略。这归结为忽略标点符号和空格。
case_level
可能的值:truefalse(默认)。是否需要区分大小写排序。当强度设置为 primary 时,这将忽略重音差异。
case_first
可能的值:lowerupper。当强度 tertiary 不忽略大小写时,用于控制首先排序哪个大小写。默认值取决于校对。
numeric
可能的值:truefalse(默认)。数字是否按其数字表示排序。例如,值 egg-9 排在值 egg-21 之前。
variable_top
单个字符或缩写。控制 alternate 的变量。
hiragana_quaternary_mode
可能的值:truefalse。在 quaternary 强度中区分片假名和平假名字符。