仅匹配文本字段类型

match_only_text字段是text字段的变体,适用于全文搜索,当文档中术语的评分和位置信息不是关键时。

match_only_text字段与text字段在以下方面有所不同:

  • 省略存储位置、频率和规范,减少存储需求。

  • 禁用评分,使所有匹配的文档都获得恒定的评分1.0。

  • 支持所有查询类型,除了区间和跨度查询。

选择match_only_text字段类型,以优化全文搜索效率,同时降低复杂排名和位置查询,并优化存储成本。使用match_only_text创建的索引显著更小,从而降低存储成本,特别是对于大型数据集而言。

使用 match_only_text 字段,在不需要存储频率和位置的开销的情况下,快速查找包含特定术语的文档。 match_only_text 字段类型不适合基于相关性对结果进行排序,或用于依赖术语邻近性或顺序的查询,如区间或跨度查询。虽然该字段类型支持短语查询,但其性能不如使用 text 字段类型时高效。如果识别确切短语或它们在文档中的位置是必要的,请改用 text 字段类型。

示例

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

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

参数

虽然 match_only_text 支持大多数 text 字段可用的参数,但修改其中大多数可能会适得其反。此字段类型旨在简单高效,将索引中存储的数据最小化以优化存储成本。因此,保持默认设置通常是最佳做法。任何超出分析器设置的修改都可能重新引入开销并抵消 match_only_text 的效率优势。

以下表格列出了所有可用的 match_text_only 字段参数。

参数 描述
analyzer 用于该字段的分析器。默认情况下,它将在索引时间和搜索时间使用。要在搜索时间覆盖它,设置 search_analyzer 参数。默认是 standard 分析器,该分析器使用基于语法的分词,并基于Unicode 文本分割算法
boost 所有命中项都被分配一个得分为1,并乘以以产生查询子句的最终得分。
eager_global_ordinals 指定全局序数是否在刷新时预加载。如果该字段经常用于聚合,则应将此参数设置为true。默认为false。
fielddata 布尔值,指定是否访问分析后的标记进行排序、聚合和脚本处理。默认为false。
fielddata_frequency_filter 一个JSON对象,指定只加载文档频率在min和max值之间(以绝对数字或百分比提供)的已分析标记。频率按段计算。参数:min、max、min_segment_size。默认情况下,加载所有已分析标记。
fields 为了以多种方式索引相同的字符串(例如,作为关键词和文本),请提供 fields 参数。您可以指定用于搜索和排序以及聚合的字段的一个版本。
index 布尔值,用于指定字段是否可搜索。默认值为true。
index_options 您不能修改此参数。
index_phrases 不支持。
index_prefixes 不支持。
meta 接受此字段的元数据。
norms 规范已被禁用,无法启用。
position_increment_gap 尽管位置被禁用,position_increment_gap在短语查询中使用时与text字段的行为类似。此类查询可能较慢,但仍然可用。
similarity 设置相似度(similarity)未生效。match_only_text 字段类型不支持依赖相似度的查询(例如 more_like_this)。如需执行依赖相似度的查询,请使用 keyword 或 text 字段类型。
term_vector 术语向量受到支持,但使用它们是不被推荐的,因为这与其主要目的——存储优化——相矛盾。

从text迁移字段到match_only_text。

您可以使用Reindex API通过更新目标索引中的正确映射从text字段迁移到match_only_text。

以下示例中,source索引包含一个类型为text的title字段。

创建一个目标索引,将title字段映射为text:

PUT destination
{
  "mappings" : {
    "properties" : {
      "title" : {
        "type" :  "match_only_text"
      }
    }
  }
}

重新索引数据:

POST _reindex
{
   "source": {
      "index":"source"
   },
   "dest": {
      "index":"destination"
   }
}