Link Search Menu Expand Document Documentation Menu

关键字字段类型

1.0 版引入

关键字字段类型包含一个未被分析的字符串。它只允许精确的、区分大小写的匹配。

默认情况下,关键字字段既会被索引(因为 index 已启用),也会存储在磁盘上(因为 doc_values 已启用)。为了减少磁盘空间,你可以通过将 index 设置为 false 来指定不索引关键字字段。

如果你需要将某个字段用于全文搜索,请将其映射为 text 类型。

示例

以下查询创建了一个带有关键字字段的映射。将 index 设置为 false 指定将 genre 字段存储在磁盘上,并使用 doc_values 检索它

PUT movies
{
  "mappings" : {
    "properties" : {
      "genre" : {
        "type" :  "keyword",
        "index" : false
      }
    }
  }
}

参数

下表列出了关键字字段类型接受的参数。所有参数都是可选的。

参数 描述
提升 一个浮点值,指定此字段对相关性得分的权重。高于 1.0 的值会增加字段的相关性。介于 0.0 和 1.0 之间的值会降低字段的相关性。默认值为 1.0。
doc_values 一个布尔值,指定字段是否应存储在磁盘上,以便用于聚合、排序或脚本编写。默认值为 true
eager_global_ordinals 指定全局序数是否应在刷新时急切加载。如果该字段经常用于聚合,则应将此参数设置为 true。默认值为 false
fields 要以多种方式(例如,作为关键字和文本)索引同一个字符串,请提供 fields 参数。你可以指定字段的一个版本用于搜索,另一个版本用于排序和聚合。
ignore_above 任何长于此整数值的字符串都不应被索引。默认值为 2147483647。默认的动态映射会创建一个关键字子字段,其 ignore_above 设置为 256。
index 一个布尔值,指定字段是否可搜索。默认值为 true。为了减少磁盘空间,将 index 设置为 false
index_options 要存储在索引中的信息,在计算相关性分数时会考虑这些信息。可以设置为 freqs 用于词项频率。默认值为 docs
meta 接受此字段的元数据。
normalizer 指定在索引前如何预处理此字段(例如,将其转换为小写)。默认值为 null(不进行预处理)。
norms 一个布尔值,指定在计算相关性分数时是否应使用字段长度。默认值为 false
null_value 一个用于替代 null 的值。必须与字段类型相同。如果未指定此参数,则当其值为 null 时,该字段被视为缺失。默认值为 null
similarity 用于计算相关性分数的排名算法。默认值为索引的 similarity 设置(默认情况下为 BM25)。
use_similarity 确定是否计算相关性分数。默认值为 false,这会使用 constant_score 以实现更快的查询。将此参数设置为 true 会启用评分,但可能会增加搜索延迟。参见 use_similarity 参数
split_queries_on_whitespace 一个布尔值,指定全文查询是否应在空格处拆分。默认值为 false
存储 一个布尔值,指定字段值是否应存储并可与 _source 字段分开检索。默认值为 false

use_similarity 参数

use_similarity 参数控制 OpenSearch 在查询 keyword 字段时是否计算相关性分数。默认情况下,它被设置为 false,这通过使用 constant_score 来提高性能。将其设置为 true 会启用基于配置的相似性算法(通常是 BM25)进行评分,但可能会增加查询延迟。

在禁用 use_similarity(默认)的索引上运行词项查询

GET /big5/_search
{
  "size": 3,
  "explain": false,
  "query": {
    "term": {
      "process.name": "kernel"
    }
  },
  "_source": false
}

该查询快速返回结果(10 毫秒),并且所有文档都获得 1.0 的恒定相关性分数。

{
  "took": 10,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 10000,
      "relation": "gte"
    },
    "max_score": 1,
    "hits": [
      {
        "_index": "big5",
        "_id": "xDoCtJQBE3c7bAfikzbk",
        "_score": 1
      },
      {
        "_index": "big5",
        "_id": "xzoCtJQBE3c7bAfikzbk",
        "_score": 1
      },
      {
        "_index": "big5",
        "_id": "yDoCtJQBE3c7bAfikzbk",
        "_score": 1
      }
    ]
  }
}

若要为 process.name 字段启用使用默认 BM25 算法的评分,请在索引映射中提供 use_similarity 参数

PUT /big5/_mapping
{
  "properties": {
    "process.name": {
      "type": "keyword",
      "use_similarity": true
    }
  }
}

当你在配置的索引上运行相同的词项查询时,查询运行时间会更长(200 毫秒),并且返回的文档会根据词频和其他 BM25 因素具有不同的相关性分数。

{
  "took" : 200,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 10000,
      "relation" : "gte"
    },
    "max_score" : 0.8844931,
    "hits" : [
      {
        "_index" : "big5",
        "_id" : "xDoCtJQBE3c7bAfikzbk",
        "_score" : 0.8844931
      },
      {
        "_index" : "big5",
        "_id" : "xzoCtJQBE3c7bAfikzbk",
        "_score" : 0.8844931
      },
      {
        "_index" : "big5",
        "_id" : "yDoCtJQBE3c7bAfikzbk",
        "_score" : 0.8844931
      }
    ]
  }
}
剩余 350 字符

有问题?

想要贡献?