目录

ElasticSearch

ElasticSearch


初识ES

认识和安装

https://i-blog.csdnimg.cn/img_convert/2998229014b9676c9f188a2a0da74810.png

https://i-blog.csdnimg.cn/img_convert/f34de04336a0212f1607187f16539418.png

https://i-blog.csdnimg.cn/img_convert/5aa04d837af9a0bef16f69c2271b94b6.png

https://i-blog.csdnimg.cn/img_convert/7f544da6711ecc37acc31ddf10ab3c58.png

安装es和Kibana

还是和之前差不多的步骤

还是选择从本地上传镜像到虚拟机root目录,再加载好

docker load -i	es.tar
docker load -i	kibana.tar

加载好再移除掉tar包(比较大,有点占空间)

rm  -rf  *.tar

run

docker run -d \
  --name es \
  -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
  -e "discovery.type=single-node" \
  -v es-data:/usr/share/elasticsearch/data \
  -v es-plugins:/usr/share/elasticsearch/plugins \
  --privileged \
  --network hmall \
  -p 9200:9200 \
  -p 9300:9300 \
  elasticsearch:7.12.1
docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network hmall \
-p 5601:5601  \
kibana:7.12.1

倒排索引

https://i-blog.csdnimg.cn/img_convert/03393a197e49ddbf88ed23a6f8de308d.png

倒排索引

https://i-blog.csdnimg.cn/img_convert/7b3bbc3b627381abeb7151faa452a342.png

https://i-blog.csdnimg.cn/img_convert/e2b23d9506add2b61894b69337e556cf.png

IK分词器

https://i-blog.csdnimg.cn/img_convert/77b1bf6defe56426896073fada22fe3f.png

在线安装(对网速有要求)

运行一个命令即可:

docker exec -it es ./bin/elasticsearch-plugin  install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip

然后重启es容器:

docker restart es
离线安装

先查看有哪些数据卷:

docker volume ls

https://i-blog.csdnimg.cn/img_convert/d29d2ab9fe5fefbe1654f203478e8c0b.png

发现es容器里面的插件目录挂载好了(安装时通过数据卷挂载的)

查看一下挂载到虚拟机的哪个目录了:

docker volume inspect es-plugins

https://i-blog.csdnimg.cn/img_convert/2455cd32e4a73802c9746d4a571d7100.png

进入这个目录:

cd	/var/lib/docker/volumes/es-plugins/_data

创建一个ik目录,把本地的压缩包

https://i-blog.csdnimg.cn/img_convert/ff86d44a6b13106b22bdf7c09adc5c34.png

上传到虚拟机的ik目录里,然后再解压,解压后再把压缩包删除了。

mkdir ik
unzip ***.zip
rm ****.zip

重新启动es:

docker restart es
测试

https://i-blog.csdnimg.cn/img_convert/db3ca274857ff4b0d7982bd08a405db2.png

https://i-blog.csdnimg.cn/img_convert/e8a54dc03d051625e21da1bd3a2c53a2.png

https://i-blog.csdnimg.cn/img_convert/88e124463cc2100020e5d98204b92c14.png

拓展词条

https://i-blog.csdnimg.cn/img_convert/62d7a87472ad6d2e3a65ffd03b13fb8a.png

总结

https://i-blog.csdnimg.cn/img_convert/6940af534d403a1fac29cebd05e7fa4b.png

基本概念

https://i-blog.csdnimg.cn/img_convert/99c3729923100bcdbece770defb7c387.png

https://i-blog.csdnimg.cn/img_convert/ac3d825f0c227442f61377d50e433b71.png

https://i-blog.csdnimg.cn/img_convert/ba922edbf32fbfdb74d3b764057ce25d.png

索引库操作

Mapper映射属性

https://i-blog.csdnimg.cn/img_convert/40ef8674f374f0dcfe80c23d98c76a1f.png

这里 是否创建索引 取决于 这个字段参不参与搜索或者排序。

注:

这个举例的 es文档score字段 ,如果为其创建了index索引,用于去排序,

排序规则:由于score是数组,里面有多个分数,那么去和 其它文档 根据这个字段排序的话,es会默认 选一个分数 去参与排序。

如果是升序排: 拿最小的分数去比较( 升序是小的在大的前面)

如果是降序排: 拿最大的分数去比较( 降序是大的在小的前面

索引库的CRUD

https://i-blog.csdnimg.cn/img_convert/2be0fd06d0821e447d7c996d5930585f.png

https://i-blog.csdnimg.cn/img_convert/39d4c2091dfc310327241d4bb641ecf1.png

https://i-blog.csdnimg.cn/img_convert/78ee6394c631125a15898b85a225af6d.png

https://i-blog.csdnimg.cn/img_convert/d1a992f9371d303e1f53a04d6cf15efb.png

https://i-blog.csdnimg.cn/img_convert/51476ed32e3c2562303237c355a96ac8.png

以上这些都是类似sql的 DDL操作 ,不是日常的curd。

文档操作

文档CRUD

https://i-blog.csdnimg.cn/img_convert/4c4e99b6cd725d3b327444eca18e064c.png

https://i-blog.csdnimg.cn/img_convert/03d48eee583117f4d517a25701f9bf07.png

https://i-blog.csdnimg.cn/img_convert/dca385bf18026ffe2cdfa64ea313fca8.png

https://i-blog.csdnimg.cn/img_convert/93e985a6ce44e9473a2be3aa5873ae69.png

批量处理

https://i-blog.csdnimg.cn/img_convert/bb0778310d354d50c91c3691a830f0ed.png

JavaRestClient

客户端初始化

https://i-blog.csdnimg.cn/img_convert/6830cee3700a079bfed017bfd2f7badc.png

商品Mapping映射

这里重点是 根据业务设计索引库字段 以及其 mapper映射属性。

索引库操作

https://i-blog.csdnimg.cn/img_convert/8d513039f50b6662c039071158099912.png

https://i-blog.csdnimg.cn/img_convert/94dca1f2382d13ff063c18c39d9b7487.png

https://i-blog.csdnimg.cn/img_convert/664334fa66b94e8d1b71d6db1db11a54.png

文档操作

https://i-blog.csdnimg.cn/img_convert/ce0982a45fb41c40db1fd6fbac3b9311.png

新增文档的数据是 从数据库商品表 里取出来的。

https://i-blog.csdnimg.cn/img_convert/c2e20237aaf2bd230af6b992cdcb43ac.png

https://i-blog.csdnimg.cn/img_convert/3885077e430f0e3eae3102f6ffda5748.png

https://i-blog.csdnimg.cn/img_convert/d5b0f76966fb5ded95e2fdae3158fd89.png

https://i-blog.csdnimg.cn/img_convert/6d531bc68916702ea0fa2d8c12cc1f63.png

批量处理

https://i-blog.csdnimg.cn/img_convert/921e67ec81ed02ec0e5d52a9b34e0b25.png

DSL查询

https://i-blog.csdnimg.cn/img_convert/89533ecc47f3724886bc1febe6b1c827.png

快速入门

https://i-blog.csdnimg.cn/img_convert/1c988685bfe0e58b4180dac94d97d93a.png

叶子查询

https://i-blog.csdnimg.cn/img_convert/1c78ccbec01b64232a21bd8e8ab32b88.png

全文检索查询:

https://i-blog.csdnimg.cn/img_convert/60179bea0b316bc4b36bb315280715ac.png

精确查询:

https://i-blog.csdnimg.cn/img_convert/55170949f497d7f8c0a9b5e8997bbe17.png

举例:

https://i-blog.csdnimg.cn/img_convert/910a5f49676495b4fbde4b6cb1014a62.png

总结

https://i-blog.csdnimg.cn/img_convert/0094b2b672c0e5ee12fd5d54c87906e3.png

复合查询

https://i-blog.csdnimg.cn/img_convert/47c658286eeb78785914fc65f6ab0029.png

第一类:布尔查询

https://i-blog.csdnimg.cn/img_convert/2c1a5ab1748a7a54dd5430a7dc10c6bf.png

排序和分页

排序

https://i-blog.csdnimg.cn/img_convert/efeff8ba4ac1cc013dc8f86216611121.png

举例:

https://i-blog.csdnimg.cn/img_convert/a11d10d091166c035622d3139e49d845.png

分页

https://i-blog.csdnimg.cn/img_convert/a250daf9ea1affecbdf1d5d38fa710ca.png

深度分页问题

https://i-blog.csdnimg.cn/img_convert/6b1d23342df04607bc3e8fb43ee6393a.png

https://i-blog.csdnimg.cn/img_convert/e2bda8071f4c2f2845c33c75d35818cd.png

总结:

大多数情况下,我们 采用普通分页 就可以了。查看百度、京东等网站,会发现其分页都有限制。例如百度最多支持77页,每页不足20条。京东最多100页,每页最多60条。

因此,一般我们采用 限制分页深度的方式 即可,无需实现深度分页。

而elasticsearch会禁止 from + size 超过10000的请求。

高亮显示

https://i-blog.csdnimg.cn/img_convert/185d57d901bb21a8823e0059ad20dbe6.png

完整语法

https://i-blog.csdnimg.cn/img_convert/4077a2d1d5ba54edd59e1a193b0daa72.png

JavaRestClient

多看在线文档!!!

快速入门

https://i-blog.csdnimg.cn/img_convert/867d3f5647aa62bcde224fb3696e0648.png

https://i-blog.csdnimg.cn/img_convert/884caf228c3d2ce5ad21d7513372d6d3.png

构建查询条件

https://i-blog.csdnimg.cn/img_convert/dd83a76f72197a7fab2a13a8e37a7632.png

叶子查询
全文检索查询条件

https://i-blog.csdnimg.cn/img_convert/a817083f142b218477e046df35fe464a.png

精确查询条件

https://i-blog.csdnimg.cn/img_convert/5898652047741d3b570310ef48f5df3c.png

复合查询

布尔查询

https://i-blog.csdnimg.cn/img_convert/fee4d13a2a584dc88f4f39d610a8ec9a.png

举例

https://i-blog.csdnimg.cn/img_convert/6e251f238ed1d9f41176e0dae9aaef59.png

排序和分页

https://i-blog.csdnimg.cn/img_convert/5e958aaf0ead7311e7eea6ad974f9fb3.png

高亮显示

https://i-blog.csdnimg.cn/img_convert/dc60ffc8bb38ae703fc3839b7248b084.png

https://i-blog.csdnimg.cn/img_convert/c870aa4718f74e9d9027304e2863bb44.png

聚合

https://i-blog.csdnimg.cn/img_convert/7be9ba79cfa9bb5d74208a40adb28108.png

桶聚合

https://i-blog.csdnimg.cn/img_convert/64b2d2df3c334d69181f0f4907ed5d86.png

有限定范围的聚合

https://i-blog.csdnimg.cn/img_convert/2c274c674319009b4e917a92024e3062.png

度量聚合

https://i-blog.csdnimg.cn/img_convert/3da69abc577efd837885f1e569924bcb.png

Java客户端实现

https://i-blog.csdnimg.cn/img_convert/39e7d39082fa8703e180b56f782145f3.png

https://i-blog.csdnimg.cn/img_convert/d3e79dcba8206fcb48e9a0ee2bf51051.png