ElasticSearch笔记
-
场景
分布式全文检索,处理PB级的数据
-
相关
- Lucene
- 简单restful API隐藏Lucene的复杂性
- 对比Solr
-
安装开箱即用,在配置config中修改了jvm的默认运行内存
-
处理跨域问题:开启跨域支持,让所有用户都可以使用
http.cors.enabled: true
http.cors.allow-origin: “*” -
ElasticSearch head:当做数据库展示工具使用
-
kibana可视化工具
-
ELK三大框架:Elasticsearch、Logstash、Kibana
-
关系型数据库与es(面向文档)的对比
-
索引 1个es的索引被分为多个分片(每个分片=Lucene索引)
一索引(user)包含多个文档(1、2、3),文档即一条json数据记录
行=文档 列=fields???
-
postman测试
{
“mappings”: {
“properties”: {
“id”: {
“type”: “long”,
“store”: true
},
“title”: {
“type”: “text”,
“store”: true,
“index”:true,
“analyzer”:“standard”
},
“content”: {
“type”: “text”,
“store”: true,
“index”:true,
“analyzer”:“standard”
}
}
}
}
-
类型:文档的逻辑容器(如表是行的容器)
创建新索引时,默认类型命名为_doc
-
倒排索引 inverted index(知识查漏) :常被称为反向索引,是搜索引擎中非常重要的数据结构
文档是有许多的单词组成的,其中每个单词也可以在同一个文档中重复出现很多次,当然,同一个单词也可以出现在不同的文档中。
-
正排索引(forward index):
从文档角度看其中的单词,表示每个文档(用文档ID标识)都含有哪些单词,以及每个单词出现了多少次(词频)及其出现位置(相对于文档首部的偏移量)。
-
倒排索引(inverted index,或inverted files)
从单词角度看文档,标识每个单词分别在那些文档中出现(文档ID),以及在各自的文档中每个单词分别出现了多少次(词频)及其出现位置(相对于该文档首部的偏移量)。
简单记为:
正排索引:文档 —> 单词
倒排索引:单词 —> 文档来源:知乎GarfieldEr007https://www.zhihu.com/question/23202010/answer/80462209
- 搜索时 去停用词+分词,再倒排索引
-
-
文档CRUD
-
添加/更新数据:
-
格式:PUT 索引/类型type(默认_doc)/document文档ID?
如:
PUT jianyu/one/1/
{
“name”: “chenjianyu”,
“age”: 18
} -
如果PUT为更新操作,可以观察数据版本号变化:
“_version”: 2, (数据被改动的次数)
“result”: “updated”,
2、查询 GET
GET jianyu/one/1/
-
普通ID查询: http://localhost:9200/jianyu/one/1
-
条件查询:http://localhost:9200/jianyu/**_search****?q=name😗*chenHAHA
-
分词器对text类型有拆分的模糊查询效果,对keyword类型(不被分词器解析)只能整体查询
-
GET jianyu/**_search
{
“query”: {
“match”: {
“name”: “chenHAHA”
}
}
} -
查询结果hist->java中的Map对象
-
复杂查询:结果过滤、排序、分页、多条件查询、非(must_not)、filter数据过滤、高亮查询
-
多条件查询按匹配度评分排列结果:
3、更新数据
-
1中的PUT
-
POST
-
普通 的post和PUT一样,重写覆盖写入的数据完全代替原数据
-
在POST请求后加/_update,则只会跟新写入的数据项
-
示例:http://localhost:9200/jianyu/one/1/_update POST
{
“doc”: {
“name”: “chenHAHA”
}
}
-
-