Elasticsearch的Text数据类型

[[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 字段的参数

以下参数可以用于 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]]

Index 前缀配置

Text 字段可能会把前缀进行索引, 这样可以加速前缀搜索.
index_prefixes 参数可以按下面这样配置. min_charsmax_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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值