ES+索引库文档操作
1. es简介
Elasticsearch是一个基于Lucene构建的开源、分布式、RESTful搜索引擎,广泛用在日志数据分析,实时监控等领域,擅长于海量数据的搜索、分析、计算
核心特点
-
分布式架构:自动分片、复制数据,提供高可用性
-
近实时搜索:数据几乎可立即被搜索到
-
全文检索:强大的文本分析能力
-
RESTful API:简单易用的HTTP接口
-
多语言支持:官方提供Java客户端,与Java生态完美集成
倒排索引
倒排索引(Inverted Index)是搜索引擎(如Elasticsearch、Lucene)的核心数据结构,用于快速查找包含某个词项的文档。
-
传统索引(正排索引):文档ID -》 文档内容(如数据库按ID查数据)
-
倒排索引:词项(Term) -》 文档ID列表(实现高效全文检索)
倒排索引构建过程
假设有以下3个文档:
-
Doc1: "Java is a programming language"
-
Doc2: "Elasticsearch is built on Java"
-
Doc3: "Java and Python are popular"
(1) 分词(Tokenization)
先对文档进行分词(使用分析器Analyzer,如standard
):
-
Doc1 → ["java", "is", "a", "programming", "language"]
-
Doc2 → ["elasticsearch", "is", "built", "on", "java"]
-
Doc3 → ["java", "and", "python", "are", "popular"]
(2) 构建词项→文档的映射
词项(Term) | 文档ID列表(Posting List) |
Java | [Doc1, Doc2, Doc3] |
elasticsearch | [Doc2] |
python | [Doc3] |
... | ... |
(3) 存储额外信息(提升查询效率)
-
词频(TF, Term Frequency):该词在文档中出现的次数(影响相关性评分)
-
位置(Position):词在文档中的位置(用于短语查询,如
"Java programming"
) -
偏移量(Offset):词的字符偏移(用于高亮显示)
2. es下载安装
win版下载官网:Download Elasticsearch | Elastic
找到es下载安装bin路径,双击elasticsearch.bat启动
启动的时候可能会遇到两个问题,解决方法如下:
2.1 访问问题
找到config目录下的elasticsearch.yml文件,点开后,将这几个配置都改成false,保存后重新运行
成功访问✌
2. 内存占用量问题
因为es运行需要占用很大内存,内存容易出现自己死机的情况,所以可以通过修改内存占用量避免这种问题发生, 找到config目录下的jvm.options文件,点开后修改内存占用量,保存后重新运行
3. kibana下载
kibana是es操作的图形化工具,kibana是基于Node.js运行的,如果没有安装node.js需要安装一下node.js,Download Kibana Free | Get Started Now | Elastickibana安装网址:Download Kibana Free | Get Started Now | Elastic
需要注意的是,kibana版本一定要和es版本相同,精确到小版本!
在kibana 安装目录下的kibana.bat,双击运行,启动时间比较长,大家耐心等待运行成功,登录网址http://localhost:5601/访问。
进入到 Dev Tools,就可以图形化编写代码了
4.分词器
分词器是用来处理中文分词的,有一些词组可以通过分词器配置,大家可以自行下载中文分词器,将下载好的分词器,复制粘贴到plugins目录下
重启kibana,构建分词
同时也可以扩展分词器的词库,修改config目录中的IKAnalyzer.cfg.xml文件
5. 索引库操作
ES中通过Restful请求进行索引库操作,文档操作,创建索引库和mapping的DSL语法如下:
- 创建数据类型
PUT /ityang
{"mappings": {"properties": {"age":{"type": "short"},"weight":{"type": "text","analyzer": "ik_smart"},"name":{"properties": {"xingming":{"type":"keyword"},"sex":{"type":"text","analyzer":"ik_max_word"}}}}}
}
- 查询
- 删除,修改
# 查询
GET /ityang# 删除
DELETE /ityang# 修改
PUT /ityang/_mapping
{"properties":{"idAD":{"type":"keyword"}}
}
6. 文档操作
- 增加/删除/查询/修改 文档数据
# 新增数据
POST /ityang/_doc/1
{"age":18,"weight":100,"name":{"xingming":"百度","sex":"男"}
}# 查询
GET /ityang/_doc/1# 删除
DELETE /ityang/_doc/1# 修改
# 全量修改 -- 删除原来的文档,添加新文档
PUT /ityang/_doc/1
{"age":20,"name":{"xingming":"百度www"}
}
7. Java进行ES文档操作
Elasticsearch(ES)提供 RESTful API 和 Java High-Level REST Client 进行文档操作。
我推荐大家一个博主写的一篇文章,叫《Elasticsearch掰开揉碎第12篇java操作ES常用API》,链接是这个:Elasticsearch掰开揉碎第12篇java操作ES常用API_走不完的路,看不完的书!的技术博客_51CTO博客
大家可以去看一下~