同一个索引下不同类型
ES6.4.2不支持定义不同类型 (类型相当于表的概念)
ES5.6.4支持
5.*之后,把string字段设置为了过时字段,引入text,keyword字段
这两个字段都可以存储字符串使用,但建立索引和搜索的时候是不太一样的
keyword:存储数据时候,不会分词建立索引
text:存储数据时候,会自动分词,并生成索引
---------------------------
elasticsearch7.0有哪些重大改进
1、彻底废弃多type支持,包括api层面,之前版本可在一个索引库下创建多个type。
2、彻底废弃_all字段支持,为提升性能默认不再支持全文检索,即7.0之后版本进行该项配置会报错。
3、新增应用程序主动监测功能,搭配对应的kibana版本,用户可监测应用服务的健康状态,并在出现问题后及时发出通知。
4、取消query结果中hits count的支持(聚合查询除外),使得查询性能大幅提升(3x-7x faster)。这意味着,每次查询后将不能得到精确的结果集数量。
5、新增intervals query ,用户可设置多字符串在文档中出现的先后顺序进行检索。
6、新增script_core ,通过此操作用户可以精确控制返回结果的score分值。
7、优化集群协调子系统,缩减配置项提升稳定性。
8、新增 alias、date_nanos、features、vector等数据类型。
9、7.0自带java环境,所以我们在安装es时不再需要单独下载和配置java_home。
10、7.0将不会再有OOM的情况,JVM引入了新的circuit breaker(熔断)机制,当查询或聚合的数据量超出单机处理的最大内存限制时会被截断,并抛出异常(有点类似clickhouse)。
es7.0新增数据类型:alias、date_nanos、features、vector
alias:并不实际存在,而是对已有字段的一种别名映射,搜索该字段与搜索实际字段返回的内容没有本质的区别。
date_nanos:另一种时间类型,可精确到纳秒,用法类似date。
features:用来存储特征向量,数据不能为0和负数,查询时只能使用rank_feature query,该字段主要为支持后续机器学习相关功能做准备。
vector:存储特征数组,支持稀疏与稠密向量存储,该字段主要为支持后续机器学习相关功能做准备。
------------------------------------------------------------------
如果没有安装JAVA,就要运行:yum install java*
简单配置vi /etc/profile 在尾部加上
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
使其生效:source /etc/profile
-----------------------------------------
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.4.rpm
yum install -y elasticsearch-5.6.4.rpm
wget https://artifacts.elastic.co/downloads/kibana/kibana-5.6.4-x86_64.rpm
yum install -y kibana-5.6.4-x86_64.rpm
安装完成后,创建ES的数据目录:
mkdir /mydata/esdata
chown -R elasticsearch:elasticsearch /mydata/esdata
修改ES配置文件:
vi /etc/elasticsearch/elasticsearch.yml
path.data: /mydata/esdata
path.logs: /mydata/esdata
network.host: 127.0.0.1
http.port: 9200
vi /etc/kibana/kibana.yml
server.port: 5601 //监听端口
server.host: "127.0.0.1" //监听IP地址
elasticsearch.url: "http://127.0.0.1:9200"
修改好之后,激活服务启动:
systemctl daemon-reload
systemctl enable elasticsearch.service
systemctl enable kibana
systemctl start elasticsearch.service
systemctl start kibana
------------------------------------------------------------------
常见查询语句:
#完整搜索
GET /myindexname/_search
{
"query": {
"match": {
"username": "admin"
}
}
}
#全文搜索
GET /myindexname/test/_search
{
"query": {
"match_phrase": {
"text": "祖国"
}
}
}
#查看有哪些索引
GET /_cat/indices?v
GET /myindexname/_mapping
#查看有哪些别名
GET /_cat/aliases?v
#创建索引,设置动态自动识别新增字段
PUT myindexname
{
"mappings": {
"test": {
"dynamic": true ,
"numeric_detection":true,
"properties": {
"name": { "type": "text" },
"data": { "type": "text" }
}
}
}
}
新增类型:
PUT /myindexname/user/_mapping
{
"properties": {
"name": { "type": "text" },
"data": { "type": "text" }
}
}
多条进查询
GET /file_notify/_search
{
"query": {
"bool": {
"should": [
{ "match": { "uuid": "AAAAAAAA-AAAA-AAAA-AAAA-4A0F873003BB" }},
{ "match": { "name": "117" }}
]
}
}
}
删除 file_notify 库 里 mailbox 表 所有数据
POST /file_notify/mailbox/_delete_by_query?conflicts=proceed
{
"query": {
"match_all": {}
}
}
通配符与正则表达式查询
GET /file_notify/mailbox/_search
{
"query": {
"wildcard": {
"uuid": "*4A0F873003BB"
}
}
}
GET /my_index/address/_search
{
"query": {
"regexp": {
"postcode": "W[0-9].+"
}
}
}
参考文档:https://www.elastic.co/guide/cn/elasticsearch/guide/current/_wildcard_and_regexp_queries.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-params.html
注意事项:es支持的日期格式,可以查看官方网页:
https://www.elastic.co/guide/en/elasticsearch/reference/current/date.html
https://www.elastic.co/guide/en/elasticsearch/reference/5.6/mapping-date-format.html
PUT my_index
{
"mappings": {
"_doc": {
"properties": {
"date": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis",
"null_value": "NULL",
"ignore_malformed": true
}
}
}
}
}
为了避免在同步数据中出错,在建mappings的时候可以加入以下两个参数:
null_value 接受其中一个配置的日期值format作为替换任何显式null值的字段。默认为null,表示该字段被视为缺失。
ignore_malformed 如果true,错误的字段被忽略。如果false(默认),格式错误的字段会抛出异常并拒绝整个文档。
还有一个在分页查询时,最大返回结果为10000条,需要修改max_result_window参数,最大支持20亿:
PUT /my_index/_settings
{
"index": {
"max_result_window": "200000000"
}
}
========================================
nginx 配置反向代理,增加 kibana 安全用户名密码登陆。
htpasswd 文件格式:用户名:密码
密码生成PHP方法:
<?php
// 密码明文
$password = 'youpassword';
// 对密码进行加密
$password = crypt($password, base64_encode($password));
// 获得加密后的密码
echo $password;
?>
nginx 配置文件,其中SSL证书和KEY需要注意改成自己域名的。
server
{
listen 443;
ssl on;
ssl_certificate /usr/local/nginx/1_bundle.crt;
ssl_certificate_key /usr/local/nginx/2_kibana.key;
server_name youkibana.com;
index index.html index.htm index.php default.html default.htm default.php;
access_log off;
proxy_connect_timeout 8;
proxy_read_timeout 60;
proxy_send_timeout 8;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
location / {
auth_basic "Yts Kibana Monitor Center";
auth_basic_user_file /usr/local/nginx/html/htpasswd;
proxy_pass http://127.0.0.1:5601/;
proxy_redirect default;
proxy_set_header Host 127.0.0.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}