elasticsearch入门

简介

DB引擎排名

Elasticsearch 是一个基于Apache Lucene、分布式、搜索和数据分析引擎。

  • 搜索引擎

  • 准实时

  • NoSQL

  • 海量存储

  • 天生分布式

基础概念

索引、类型、文档、字段

ElasticSearch

MySQL

index

索引

database

type

类型

table

document

文档

row

field

字段

column

字段

字段索引

多重含义

名词

索引是为了加速对表中数据行的检索而创建的一种分散的存储结构

动词

此项分析过程

倒排索引

数据

  

数据检索

结构化数据

检索

索引 B Tree

非结构化数据

全文检索

倒排索引 inverted index

  • 全文检索

结构化数据,以事先设定的特定结构,长度存储,类似关系型数据库(MySQL),检索相对方便简单。

非结构化数据,没有特定结构,没有特定长度,例如,网页,邮件,文章。对于非结构化数据的检索,称之为全文检索

  • 倒排索引

  • 倒排列表

  • 倒排文件

文档分析:文档的词项提取称之为文档分析,是全文检索的核心过程。

DocumentId

Document

1

我在西安。

2

我在西安工作。

DocumentId

Term

1

我 西安

我 西安 工作

Term

TF

DocumentId:Position

Offset

2

1:0,2:0

<0,1>,<0,1>

倒排列表

2

1:1,2:1

<1,2>,<1,2>

倒排列表

西安

2

1:2,2:2

<2,4>,<2,4>

倒排列表

工作

1

2:3

<4,6>

倒排列表

正向索引

字段参数

{

"mappings":{

"dynamic":"true",

"properties":{

"brand_name":{

"type":"text",

"term_vector":"with_positions_offsets",

"analyzer":"ik_smart"

},

"cover_img":{

"type":"text"

},

"is_supplier_send":{

"type":"integer"

},

"price":{

"type":"float"

},

"product_name":{

"type":"text",

"term_vector":"with_positions_offsets",

"analyzer":"ik_smart"

},

"sort":{

"type":"integer"

},

"spu_code":{

"type":"keyword"

},

"spu_id":{

"type":"integer"

},

"stock":{

"type":"long"

},

"supplier_category":{

"type":"text"

},

"supplier_category_name":{

"type":"text",

"term_vector":"with_positions_offsets",

"analyzer":"ik_smart"

},

"supplier_code":{

"type":"text"

}

}

}

}

参数

默认值

说明

dynamic

true

动态处理新添加字段

properties

\

嵌套类型或对象类型的字段

type

数据类型

term_vector

no

是否保存词项列表.https://www.jianshu.com/p/e6d2723be0c9

analyzer

standard

分析器

search_analyzer

\

搜索时使用的分析器

index

true

是否编入索引

元字段

字段限制

为了避免索引中定义太多字段,内存不足,系统崩溃。

index.mapping.total_fields.limit :一个索引中能定义的字段的最大数量,默认是 1000

index.mapping.depth.limit:字段的最大深度,以内部对象的数量来计算,默认是20

index.mapping.nested_fields.limit:索引中嵌套字段的最大数量,默认是50

字段数据类型

mapping

{

"properties": {

"_source": {

"enabled": false

}

}

}

{

"soar" : {

"mappings" : {

"properties" : {

"content" : {

"type" : "text",

"analyzer" : "ik_max_word",

"search_analyzer" : "ik_smart"

}

}

}

}

}

{

"mappings": {

"properties": {

"city": {

"type": "text",

"fields": {

"raw": {

"type": "keyword"

}

}

}

}

}

}

// GET my_index/_search

{

"query": {

"match": {

"city": "York"

}

},

"sort": {

"city.raw": "asc"

}

}

分片、副本

  • 分布式系统CAP定理

CAP 定理的含义: http://www.ruanyifeng.com/blog/2018/07/cap.html

  • 高可用

服务可用性-允许有节点停止服务

数据可用性-部分节点丢失,不会丢失数据

  • 可扩展

动态扩展节点

{

"settings":{

"number_of_shards" : "1",

"number_of_replicas" : "0"

}

}

  • 修改副本数

演示

  • 修改主分片数

演示

节点、节点角色

节点

elasticsearch节点:ES运行的一个实例。

节点角色

master-eligible node

具备选举为主节点资格的节点。

master node

主节点具有修改集群信息的权限。维护集群状态,节点信息,索引、mapping和setting,路由。

data node

保存数据的节点,负责保存分片数据,在分片扩展时至关重要。

coordinating node

负责Client请求,将请求分发到合适节点,将结果汇集。

默认情况下,所有节点都具有改功能职责。

集群

搭建集群

#初始主节点

cluster.initial_master_nodes: ["es1","es2","es3"]

# 开启跨域,为了让es-head可以访问

http.cors.enabled: true

http.cors.allow-origin: "*"

# 集群的名称

cluster.name: soarfreely-cluster

# 节点的名称

node.name: es1

# 指定该节点是否有资格被选举成为master节点,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master

node.master: true

# 允许该节点存储数据(默认开启)

node.data: true

# 允许任何ip访问

network.host: 0.0.0.0

http.port: 9204

transport.tcp.port: 9304

# 通过这个ip列表进行节点发现

#discovery.seed_hosts: ["172.17.0.4:9304","172.17.0.5:9305","172.17.0.6:9306"]

discovery.zen.ping.unicast.hosts: ["172.17.0.4:9304","172.17.0.5:9305","172.17.0.5:9306"]

#如果没有这种设置,遭受网络故障的集群就有可能将集群分成两个独立的集群 – 导致脑裂 - 这将导致数据丢失

discovery.zen.minimum_master_nodes: 2

#(有master资格节点数/2) + 1

transport.tcp.compress: true

脑裂现象

CRUD

CRUD

事例

说明

Index

PUT my_index/_doc/1

如果不存在,创建,否则先删除。

Create

PUT my_index/_create/1

POST my_index/_doc

id存在会报错

不指定id,会自动生成

Update

POST my_index/_update/1

更新,id不存在会报错

Read

GET my_index/_doc/1

查询指定id文档

DELETE

DELETE my_index/_doc/1

删除指定id文档 

插件

分析器/分词器

字符过滤器:对输入的全文数据做预处理,比如去除html中的<b>标签

分词器:根据词义做分词,需要字典支持

分词过滤器:对分词器处理结果进一步加工,例如字母转小写,去除停止词(的,得,地)

更多插件:http://elasticsearch.cn/article/66

安装插件

ik分词器

两个分词算法:

ik_max_word: 会将文本做最细粒度的拆分

ik_smart: 会做最粗粒度的拆分(最少切分)

  • 在线安装

./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.5.1/elasticsearch-analysis-ik-7.5.1.zip

  • 离线安装

将elasticsearch-analysis-ik-7.5.1.zip解压文件拷贝到 {install_dir}/plugins/ik

  • 查看

./bin/elasticsearch-plugin list

http://domain/_cat/plugins

  • 自定义字典

客户端API

演示

批量

bulk一次最大处理多少数据量?

Bulk会把将要处理的数据载入内存中,所以数据量是有限制的,最佳的数据量不是一个确定的数值,它取决于硬件,文档大小,复杂性,索引、以及搜索的负载。一般建议是1000-5000个文档,大小建议是5-15M,默认不能超过100M,可以在elasticsearch的配置文件elasticsearch.yml中配置。

http.max_content_length: 100mb

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值