Field datatype
  string类型
    ELasticsearch 5.X之后的字段类型不再支持string,由text或keyword取代
  text类型
    当一个字段是要被全文搜索的,字段内容会被分析,在生成倒排索引以前,字符串会被分析器分成一个一个词项
  keyword类型
    keyword类型适用于索引结构化的字段,keyword类型的字段只能通过精确值搜索到

  数字类型

    long等等

  Object类型

    JSON

  date类型
    JSON中没有日期类型,所以在ELasticsearch中,日期类型可以是字符串、long

  range类型

   Array类型

    数组第一个值的类型就是整个数组的类型

  nested类型

    nested嵌套类型是object中的一个特例,可以让array类型的Object独立索引和查询

       geo point 类型

    坐标

  binary类型
  ip类型
  token_count类型

 

Meta-Fields
_all
定义
_all字段是把其它字段拼接在一起的超级字段,所有的字段用空格分开,_all字段会被解析和索引,但是不存储
使用copy_to自定义_all字段 

_field_names
_field_names字段用来存储文档中的所有非空字段的名字,这个字段常用于exists查询

_routing(路由参数)
路由公式:
ELasticsearch通过以下公式计算文档应该分到哪个分片上:
shard_num = hash(_routing) % num_primary_shards
说明
1 索引时指定routing参数,查询时才能在指定路由上查询
2 如果分片的数量改变了,所有先前的路由值就会变成非法了,文档相当于丢失了
3 Elasticsearch有一个默认的路由算法:它会将文档的ID值作为依据将其哈希到相应的主分片上,这种算法基本上会保持所有数据在所有分片上的一个平均分布,而不会产生数据热点。
4 默认路由的问题:Elasticsearch使用文档的ID将文档平均的分布于所有的分片上,这导致了Elasticsearch不能确定文档的位置,所以它必须将这个请求广播到所有的所有分片上去执行

_source
存储的文档的原始值
_type
文档类型
_index
多索引查询时,有时候只需要在特地索引名上进行查询,_index字段提供了便利,也就是说可以对索引名进行term查询、terms查询、聚合分析、使用脚本和排序。
_parent
_parent用于指定同一索引中文档的父子关系

 

 

Mapping参数
analyzer
相关概念
全文搜索引擎会用某种算法对要建索引的文档进行分析, 从文档中提取出若干Token(词元), 这些算法称为Tokenizer(分词器);这些Token会被进一步处理, 比如转成小写等, 这些处理算法被称为Token Filter(词元处理器), 被处理后的结果被称为Term(词)
ES内置若干analyzer, 另外还可以用内置的character filter, tokenizer, token filter组装一个analyzer

指定分词器(分析器更合理),对索引和查询都有效

"analysis": {
"analyzer": {
"ik_smart_pinyin": {
"type": "custom",
"tokenizer": "ik_smart",
"filter": [
"my_pinyin",
"word_delimiter"
]
},
"ik_max_word_pinyin": {
"type": "custom",
"tokenizer": "ik_max_word",
"filter": [
"my_pinyin",
"word_delimiter"
]
}
},
"filter": {
"my_pinyin": {
"type": "pinyin",
"keep_separate_first_letter": true,
"keep_full_pinyin": true,
"keep_joined_full_pinyin": true,
"keep_none_chinese_in_joined_full_pinyin": true,
"keep_original": true,
"limit_first_letter_length": 16,
"lowercase": true,
"remove_duplicated_term": true
}
}
}

boost

doc_values
doc_values是为了加快排序、聚合操作,在建立倒排索引的时候,额外增加一个列式存储映射,是一个空间换时间的做法。默认是开启的,对于确定不需要聚合或者排序的字段可以关闭。

 

norms
norms参数用于标准化文档,以便查询时计算文档的相关性。norms虽然对评分有用,但是会消耗较多的磁盘空间,如果不需要对某个字段进行评分,最好不要开启norms。

 

Elasticsearch应用

ELK

E 就是 Elasticsearch,L 是 Logstash,是一个日志收集系统,K 是 Kibana,是一个数据可视化平台。

 

Windows环境安装

一 ******安装 es 5.4.2******
https://www.cnblogs.com/tonqiang/archive/2017/07/14/7087807.html

二 ******安装分词器*******
IK分词
1 下载。ik分词链接GitHub。由于ik分词器要求与Elasticsearch的版本高度匹配,所以我们需要下载相应的版本为5.4.2。
git下载 git clone --branch v5.4.2 https://github.com/medcl/elasticsearch-analysis-ik.git
2 打包mvn clean install -Dmaven.test.skip=true
3 解压
D:\elasticsearch\ik\elasticsearch-analysis-ik\target\releases 生成的elasticsearch-analysis-ik-5.4.2.zip
解压到D:\elasticsearch\elasticsearch-5.4.2\plugins\ik

拼音分词
1, 下载(https://github.com/medcl/elasticsearch-analysis-pinyin/releases 5.4.2下载源码包
2 打包mvn clean install -Dmaven.test.skip=true
3 解压
D:\elasticsearch\pinyin\elasticsearch-analysis-pinyin-5.4.2\target\releases 生成的elasticsearch-analysis-pinyin-5.4.2.zip
解压到D:\elasticsearch\elasticsearch-5.4.2\plugins\pinyin

三 ******启动******
本地
cd D:\elasticsearch\elasticsearch-5.4.2\bin
运行 elasticsearch.bat
cd D:\elasticsearch\elasticsearch-head\elasticsearch-head
运行 npm run start
http://localhost:9200/
http://localhost:9100/