[[text]]
=== Text 数据类型
Text 是一种需要索引全文的字段, 例如邮件正文或者商品描述.
这些字段会被 analyzed(解析)
: 在索引这些字段前, 它们的原始值会被传入一个 [analysis,analyzer], 进而转换成一些词项. 这个分析过程使得 Elasticsearch 可以查询全文字段中包含的词.
Text 字段不用来排序, 但会少量地用于聚合([search-aggregations-bucket-significanttext-aggregation,significant text aggregation]).
如果你需要索引一些已经结构化了的数据, 例如邮箱地址, 主机名, 状态码 或者标签, 那你很可能应该配置为 [keyword,keyword
] 字段
以下是一个配置 text 字段的例子:
[source,js]
PUT my_index
{
"mappings": {
"_doc": {
"properties": {
"full_name": {
"type": "text"
}
}
}
}
}
有时候会把同一个字段配置成两个, 一个为全文(text
), 另一个为关键字(keyword
):
前者用于全文搜索, 后者可以用于排序聚合.
这可以通过 [multi-fields,multi-fields] 来实现.
[[text-params]]
以下参数可以用于 text
字段:
[horizontal]
[analyzer,analyzer
]:
[analysis,analyzer] 只能给 [mapping-index,`analyzed`] string 字段用.
在创建索引或者进行查询的时候都能用(除非用 [search-analyzer,`search_analyzer`] 覆盖).
默认为 default index analyzer 或者 [analysis-standard-analyzer,`standard` analyzer].
[mapping-boost,boost
]:
Mapping field-level query time boosting(可以用于提升某个字段的评分权重). 参数值是一个浮点数, 默认 `1.0`.
[eager-global-ordinals,eager_global_ordinals
]:
是否在刷新的时候优先加载全局排序, 默认 `false`.
一般会在字段频繁的用于 (significant) terms aggregations 的时候开启.
[fielddata,fielddata
]:
字段是否可以使用基于内存的 fielddata 进行排序聚合或者 scripting. 默认 `false`.
[field-data-filtering,fielddata_frequency_filter
]:
当开启了 `fielddata` 时的高级设定, 用于配置哪些值可以加载到内存. 默认加载所有值.
[multi-fields,fields
]:
Multi-fields 支持将同一个 string 值进行多种索引, 比如一个字段用于搜索, 另一个
用于排序聚合, 还有一个用不一样的 analyzer.
[mapping-index,index
]:
这个字段是否可以查询, 默认 `true`.
[index-options,index_options
]:
保存到 index 的用于查询和高亮的信息有哪些.
默认 `positions`.
[index-prefix-config,index_prefixes
]:
开启之后, 词项前缀在 2到5个字符的会被索引到另一个字段.
这样 index 会变大, 但是前缀查询会更快.
接受参数为一个 [index-prefix-config,`index-prefix configuration block`]
[norms,norms
]:
字段长度是否计入 `评分查询`.
默认 `true`.
[position-increment-gap,position_increment_gap
]:
在一个 string 数组中, 每个元素间应该插入多少个假间隔.
默认 `100`. 因为这样可以防止查询误把两个值当成一个值.
[mapping-store,store
]:
字段值的存储与获取是否与 [mapping-source-field,`_source`] 字段分开.
默认 `false`.
[search-analyzer,search_analyzer
]:
在查询[mapping-index,`已解析`]字段的时候应该用哪个 [analyzer,`analyzer`], 默认与 `analyzer` 的值一样.
[search-quote-analyzer,search_quote_analyzer
]:
当查询遇到短语的时候应该用哪个 [analyzer,`analyzer`], 默认与 `search_analyzer` 的值一样.
[similarity,similarity
]:
用什么评分算法或者 _相似度_. 默认 `BM25`.
[term-vector,term_vector
]:
词项向量是否应该存储为一个 [mapping-index,`analyzed`] 字段. 默认 `no`.
[[index-prefix-config]]
Text 字段可能会把前缀进行索引, 这样可以加速前缀搜索.
index_prefixes
参数可以按下面这样配置. min_chars
和 max_chars
可以省略, 但都会用到.
[source,js]
PUT my_index
{
"mappings": {
"_doc": {
"properties": {
"full_name": {
"type": "text",
"index_prefixes" : {
"min_chars" : 1, <1>
"max_chars" : 10 <2>
}
}
}
}
}
}
<1> min_chars
必须大于零, 默认 2
<2> max_chars
必须大于等于 min_chars
且小于 20, 默认 5