赞
踩
elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。
elsaticsearch将它的数据存储在一个或多个索引中。相较于sql,索引就相当于Mysql中的表。
mapping可以理解为数据库的表结构,有什么字段,字段是什么类型
es支持动态mapping,表结构可以动态改变,不用像Mysql手动建表,避免没有相关字段无法插入
在 ES 中,一份文档相当于 MySQL 中的一行记录,数据以 JSON 格式保存。文档被更新时,版本号会被增加。
这是比较老旧版本会用到的定义,在 ES5 的时代,它可以对 Index 做更精细地划分,那个时代的 Index 更像 MySQL 的实例,而 type 类似 MySQL 的 table。
ES 7.x 以后,将逐步移除type这个概念,现在的操作已经不再使用,默认_doc。
9200:客户端(外部用户)调用的端口
9300:给ES内部集群通信的(外部调用不了)
一套技术建议版本一致,此处是7.17版本
Elasticsearch 7.17https://www.elastic.co/guide/en/elasticsearch/reference/7.17/setup.htmlKibana 7.17https://www.elastic.co/guide/en/kibana/7.17/install.html
访问成功
前提!!! 必须在elsaticsearch启动成功后启动才有效!
启动:bin目录cmd
端口:5601
首次访问比较慢:http://localhost:5601/
正向索引:理解为根据书中的目录找到文章
倒排索引:理解为根据内容找到文章
---假如,现在有两篇文章
文章a : 你好,小黑子
文章b : 你好,我是,coder
---构建倒排索引表
词 | 内容id |
你好 | 文章a,文章b |
小黑子 | 文章a |
我是 | 文章b |
coder | 文章b |
---用户搜 “你好 coder”
es先切词:你好,coder
然后去倒排索引表找相关文章......
ES的请求方式
GET | 查询 |
POST | 增\改\查 |
PUT | 增\改 |
DELETE | 删 |
规则:索引名称必须是小写的,不能用下划线开头,不能包含逗号:product,website,blog
PUT请求创建了一个名为"my_index01"的索引,并设置了分片和副本的数量
- PUT my_index01
- {
- "settings": {
- "number_of_shards": 3,
- "number_of_replicas": 2
- }
- }
POST请求向该索引中插入了两个文档,分别对应ID为1和2的数据
- POST my_index01/_doc/1
- {
- "name": "John Doe",
- "age": 30,
- "email": "johndoe@example.com"
- }
-
- POST my_index01/_doc/2
- {
- "name": "Jane Doe",
- "age": 25,
- "email": "janedoe@example.com"
- }
PUT blog_post_index
GET my_index01/_mapping
delete sc_001 删除索引
-
- PUT /索引名称/类型名称/文档ID(POST可以不指定)
- {
- "字段的名称":"字段值xxx"
- ...
- }
- # 我们新增2条数据分别使用POST和GET 如果没有user的话会自动的创建
- POST sc_001/user
- {
- "id":1,
- "name":"zhangsan",
- "age":40
- }
-
- PUT sc_001/user/1
- {
- "id":1,
- "name":"LISI",
- "age":31
- }
-
-
-
-
GET 索引名/_search
根据id:GET 索引名/_doc/id值
my_index01/_doc/1 索引中的数据如下 --->
修改索引中的一条数据
查询修改后数据如下--->GET my_index01/_doc/1
结果
error---> PUT指令新增索引文件的数据,必须指定id,否则报错
查询的指令格式
- POST /_sql?format=txt
- {
- "query": "SELECT * FROM library WHERE release_date < '2000-01-01'"
- }
这里简单示例一个 标准分词器
规则:英文空格分词,中文貌似单个词分词
- POST _analyze
- {
- "analyzer": "standard",
- "text": "Like X 国庆放假的"
- }
结果 like,x,国,庆,放,假,的
- {
- "tokens" : [
- {
- "token" : "like",
- "start_offset" : 0,
- "end_offset" : 4,
- "type" : "<ALPHANUM>",
- "position" : 0
- },
- {
- "token" : "x",
- "start_offset" : 5,
- "end_offset" : 6,
- "type" : "<ALPHANUM>",
- "position" : 1
- },
- {
- "token" : "国",
- "start_offset" : 7,
- "end_offset" : 8,
- "type" : "<IDEOGRAPHIC>",
- "position" : 2
- },
- {
- "token" : "庆",
- "start_offset" : 8,
- "end_offset" : 9,
- "type" : "<IDEOGRAPHIC>",
- "position" : 3
- },
- {
- "token" : "放",
- "start_offset" : 9,
- "end_offset" : 10,
- "type" : "<IDEOGRAPHIC>",
- "position" : 4
- },
- {
- "token" : "假",
- "start_offset" : 10,
- "end_offset" : 11,
- "type" : "<IDEOGRAPHIC>",
- "position" : 5
- },
- {
- "token" : "的",
- "start_offset" : 11,
- "end_offset" : 12,
- "type" : "<IDEOGRAPHIC>",
- "position" : 6
- }
- ]
- }
此处使用版本(一致):
ik 7.17.7版本https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.17.7
分词type:ik_max_word ik_smart
- POST _analyze
- {
- "analyzer": "ik_max_word",
- "text": "南京市长江大桥"
- }
结果:南京,南京市,市长,长江大桥,长江,大桥
- {
- "tokens" : [
- {
- "token" : "南京市",
- "start_offset" : 0,
- "end_offset" : 3,
- "type" : "CN_WORD",
- "position" : 0
- },
- {
- "token" : "南京",
- "start_offset" : 0,
- "end_offset" : 2,
- "type" : "CN_WORD",
- "position" : 1
- },
- {
- "token" : "市长",
- "start_offset" : 2,
- "end_offset" : 4,
- "type" : "CN_WORD",
- "position" : 2
- },
- {
- "token" : "长江大桥",
- "start_offset" : 3,
- "end_offset" : 7,
- "type" : "CN_WORD",
- "position" : 3
- },
- {
- "token" : "长江",
- "start_offset" : 3,
- "end_offset" : 5,
- "type" : "CN_WORD",
- "position" : 4
- },
- {
- "token" : "大桥",
- "start_offset" : 5,
- "end_offset" : 7,
- "type" : "CN_WORD",
- "position" : 5
- }
- ]
- }
- POST _analyze
- {
- "analyzer": "ik_smart",
- "text": "南京市长江大桥"
- }
结果:南京市,长江大桥
- {
- "tokens" : [
- {
- "token" : "南京市",
- "start_offset" : 0,
- "end_offset" : 3,
- "type" : "CN_WORD",
- "position" : 0
- },
- {
- "token" : "长江大桥",
- "start_offset" : 3,
- "end_offset" : 7,
- "type" : "CN_WORD",
- "position" : 1
- }
- ]
- }
比如有三条内容:
①你是帅哥
②你不是大美女
③我是美女
用户搜索“美女”,第③分数最高,因为匹配关键词且匹配比例更大
用户搜“你是美女”,分词:你,是,美女,匹配度:③>②>①
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。