文本字段类型

text 字段类型包含一个被分析的字符串。它用于全文搜索,因为它允许部分匹配。对多个术语的搜索可以匹配其中的一些,但不能匹配所有。根据分析器的不同,结果可以是大小写不敏感的、去根词的、去除停用词的、应用同义词的 等等。

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

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

示例

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

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

参数

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

参数 描述
analyzer 用于此字段的分析器。默认情况下,它将在索引时间和搜索时间使用。要在搜索时间覆盖它,请设置search_analyzer参数。默认为standard分析器,该分析器使用基于语法的分词,并基于Unicode文本分割算法
boost 浮点值,指定该字段对相关度得分的权重。大于1.0的值会增加字段的权重。介于0.0和1.0之间的值会降低字段的权重。默认值为1.0。
eager_global_ordinals 指定全局序数是否在刷新时预加载。如果该字段经常用于聚合,则应将此参数设置为true。默认为false。
fielddata 布尔值,指定是否为此字段访问分析过的标记进行排序、聚合和脚本编写。默认值为false。
fielddata_frequency_filter JSON对象,指定只将那些文档频率在min和max之间(以绝对数值或百分比提供)的已分析标记加载到内存中。频率按段计算。参数:min,max,min_segment_size。默认为加载所有已分析标记。
fields 要使用多种方式索引相同的字符串(例如,作为关键词和文本),请提供字段参数。您可以为搜索指定一个字段版本,为排序和聚合指定另一个字段版本。
index 布尔值,用于指定字段是否可搜索。默认值为true。
index_options 指定要存储在索引中以供搜索和突出显示的信息。有效值:docs(仅文档编号),freqs(文档编号和词频),positions(文档编号、词频和词位置),offsets(文档编号、词频、词位置和起始和结束字符偏移量)。默认为positions。
index_phrases 布尔值,指定单独索引2-gram。2-gram是该字段字符串中两个连续单词的组合。导致无模糊但更大的索引的更快的精确短语查询。在没有去除停用词的情况下效果最佳。默认值为false。
index_prefixes 一个指定分别索引词干前缀的 JSON 对象。前缀的字符数在 min_chars 和 max_chars 之间,包含两端。导致前缀搜索更快但索引更大。可选参数:min_chars,max_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>."
          ]
        }
      }
    ]
  }
}