仅匹配文本字段类型
2.12 版本引入
match_only_text
字段是 text
字段的一种变体,专为不需要在文档中进行词条评分和位置信息的全文本搜索而设计。
match_only_text
字段与 text
字段的区别如下:
- 省略存储位置、频率和范数,减少存储需求。
- 禁用评分,使所有匹配的文档都获得 1.0 的固定分数。
- 支持所有查询类型,但间隔查询(interval queries)和跨度查询(span queries)除外。
选择 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
字段的所有可用参数。
参数 | 描述 |
---|---|
分析器 | 字段要使用的分析器。默认情况下,它将在索引时和搜索时使用。要在搜索时覆盖它,请设置 search_analyzer 参数。默认值为 standard 分析器,该分析器使用基于语法的分词,并基于 Unicode 文本分段算法。 |
提升 | 所有匹配项都被赋予 1 的分数,并乘以 boost 以生成查询子句的最终分数。 |
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 | 设置相似度没有影响。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"
}
}