仅匹配文本字段类型
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"
}
}