文本字段类型
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 对象,指定只将文档频率在 min 和 max 值(以绝对数字或百分比形式提供)之间的已分析词元加载到内存中。频率是按段计算的。参数:min 、max 、min_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_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>."
]
}
}
]
}
}