文本字段类型
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>."
]
}
}
]
}
}