Link Search Menu Expand Document Documentation Menu

文本字段类型

1.0 版引入

一个 text 字段类型包含一个经过分析的字符串。它用于全文搜索,因为它允许部分匹配。对多个词条的搜索可以匹配其中一些,但不是全部。根据分析器的不同,结果可以不区分大小写、经过词干提取、去除停用词、应用同义词等等。

如果您需要使用某个字段进行精确值搜索,请将其映射为 keyword 类型。

match_only_text 字段是 text 字段的空间优化版本。如果您不需要查询短语或使用位置查询,请将该字段映射为 match_only_text 而不是 text。位置查询是指词条在短语中的位置很重要的查询,例如区间查询或跨度查询。

示例

创建一个带文本字段的映射

PUT movies
{
  "mappings" : {
    "properties" : {
      "title" : {
        "type" :  "text"
      }
    }
  }
}

参数

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

参数 描述
分析器 此字段要使用的分析器。默认情况下,它将在索引时和搜索时使用。要在搜索时覆盖它,请设置 search_analyzer 参数。默认是 standard 分析器,它使用基于语法的分词,并基于 Unicode 文本分段算法。
提升 一个浮点值,指定此字段对相关性得分的权重。高于 1.0 的值会增加字段的相关性。介于 0.0 和 1.0 之间的值会降低字段的相关性。默认值为 1.0。
eager_global_ordinals 指定是否应在刷新时预加载全局序号。如果此字段经常用于聚合,则应将此参数设置为 true。默认值为 false
fielddata 一个布尔值,指定是否访问此字段的已分析词元以进行排序、聚合和脚本编写。默认值为 false
fielddata_frequency_filter 一个 JSON 对象,指定只将文档频率在 minmax 值(以绝对数字或百分比形式提供)之间的已分析词元加载到内存中。频率是按段计算的。参数:minmaxmin_segment_size。默认是加载所有已分析词元。
fields 要以多种方式(例如,作为关键字和文本)索引同一个字符串,请提供 fields 参数。您可以指定一个字段版本用于搜索,另一个用于排序和聚合。
index 一个布尔值,指定字段是否可搜索。默认值为 true
index_options 指定要存储在索引中用于搜索和高亮显示的信息。有效值:docs(仅文档编号)、freqs(文档编号和词条频率)、positions(文档编号、词条频率和词条位置)、offsets(文档编号、词条频率、词条位置以及起始和结束字符偏移)。默认值为 positions
index_phrases 一个布尔值,指定是否单独索引 2-grams。2-grams 是此字段字符串中两个连续词的组合。这会使得精确短语查询更快,且没有容差(slop),但索引会更大。在未去除停用词时效果最佳。默认值为 false
index_prefixes 一个 JSON 对象,指定是否单独索引词条前缀。前缀中的字符数在 min_charsmax_chars 之间(包括两者)。这会使得前缀搜索更快,但索引会更大。可选参数:min_charsmax_chars。默认 min_chars 为 2,max_chars 为 5。
meta 接受此字段的元数据。
norms 一个布尔值,指定在计算相关性分数时是否应使用字段长度。默认值为 false
position_increment_gap 当文本字段被分析时,它们会被分配位置。如果一个字段包含一个字符串数组,并且这些位置是连续的,这可能会导致跨不同数组元素的匹配。为了防止这种情况,会在连续的数组元素之间插入一个人造间隙。您可以通过指定一个整数 position_increment_gap 来改变这个间隙。注意:如果 slop 大于 position_element_gap,则可能会发生跨不同数组元素的匹配。默认值为 100。
similarity 用于计算相关性分数的排序算法。默认值为 BM25
term_vector 一个布尔值,指定是否应为此字段存储词条向量。默认值为 no

词条向量参数

词条向量在分析过程中生成。它包含

  • 词条列表。
  • 每个词条的序数位置。
  • 搜索字符串在字段中的起始和结束字符偏移。
  • 负载(如果可用)。每个词条都可以拥有与其位置相关的自定义二进制数据。

term_vector 字段包含一个接受以下参数的 JSON 对象

参数 存储值
no 无。这是默认值。
yes 字段中的词条。
with_offsets 词条和字符偏移。
with_positions_offsets 词条、位置和字符偏移。
with_positions_offsets_payloads 词条、位置、字符偏移和负载。
with_positions 词条和位置。
with_positions_payloads 词条、位置和负载。

存储位置对于邻近查询很有用。存储字符偏移对于高亮显示很有用。

词条向量参数示例

创建一个文本字段映射,该字段在词条向量中存储字符偏移

PUT testindex
{
  "mappings" : {
    "properties" : {
      "dob" : {
        "type" :  "text",
        "term_vector": "with_positions_offsets"
      }
    }
  }
}

索引一个包含文本字段的文档

PUT testindex/_doc/1
{
    "dob" : "The patient's date of birth."
}

查询“出生日期”并在原始字段中高亮显示

GET testindex/_search
{
  "query": {
    "match": {
      "dob": "date of birth"
    }
  },
  "highlight": {
    "fields": {
      "dob": {} 
    }
  }
}

响应中“出生日期”一词被高亮显示

{
  "took" : 854,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 0.8630463,
    "hits" : [
      {
        "_index" : "testindex",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 0.8630463,
        "_source" : {
          "text" : "The patient's date of birth."
        },
        "highlight" : {
          "text" : [
            "The patient's <em>date</em> <em>of</em> <em>birth</em>."
          ]
        }
      }
    ]
  }
}
剩余 350 字符

有问题?

想要贡献?