ElasticSearch
ElasticSearch是一个基于Lucene的搜索服务器,
类似于Solr实现了对Lucene的封装
。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
Lucene是什么?
Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎。
Lucene 是一个高效的,基于Java 的全文检索库。
全文检索应用场景:
比如一个网站的博文搜索,一篇文章一般要1000多文字,别人搜索的时候输入的可能是标题中出现过的文字,也可能是内容里面出现过的文字,而且一般还可能用空格隔开来表示出现任意一个。
这个时候你如果用数据库,怎么来完成这种搜索呢?like?
因为like要求的是文本连续性(比如,输入“查询结果”,用数据库,你肯定写 '%查询结果%',这样如果一篇博文里面出现了“查询的结果”,你肯定搜索不出来),且一般都不会走数据库索引。
如果这么做了,那博文多了,是不是会效率非常低下?而且查询结果不全面与准确。这个时候,就要用Lucene了,在Lucene中建立博文的索引,然后直接通过Lucene来返回一个像百度一样呈现出的搜索结果概要页,然后让搜索的人自己选择去看哪个。
倒排索引
Lucene的核心是倒排索引`
`倒排索引即关键词到文件ID的映射,每个关键词都对应着一系列的文件,这些文件中都出现这个关键词。
文档列表
简单的倒排索引
Docker 安装 ElasticSearch
1.创建目录,目录结构树如下:
目录结构
2.创建docker-ompose配置文件elasticsearch.yml
version: '3'
services:
es-master:
image: elasticsearch:6.4.3
container_name: es-master
restart: always
volumes:
- ./master/data:/usr/share/elasticsearch/data:rw
- ./master/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- ./master/logs:/user/share/elasticsearch/logs:rw
ports:
- "9200:9200"
- "9300:9300"
# es-node1:
# image: elasticsearch:6.4.3
# container_name: es-node1
# restart: always
# volumes:
# - ./node1/data:/usr/share/elasticsearch/data:rw
# - ./node1/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
# - ./node1/logs:/user/share/elasticsearch/logs:rw
# es-node2:
# image: elasticsearch:6.4.3
# container_name: es-node2
# restart: always
# volumes:
# - ./node2/data:/usr/share/elasticsearch/data:rw
# - ./node2/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
# - ./node2/logs:/user/share/elasticsearch/logs:rw
es-head:
image: tobias74/elasticsearch-head:6
container_name: es-head
restart: always
ports:
- "9100:9100"
3.Elastic服务器配置文件 conf/elasticsearch.yml
network.bind_host: 0.0.0.0
cluster.name: elastic-cluster
network.host: 0.0.0.0
discovery.zen.minimum_master_nodes: 1
bootstrap.memory_lock: true
discovery.type: single-node
http.cors.enabled: true
http.cors.allow-origin: "*"
主要配置项说明:
- cluster.name 集群的名字,默认是docker-cluster
- discovery.zen.minimum_master_nodes 如果你确定是单机模式,请设置为1,官方文档是这么说
- bootstrap.memory_lock 如果你系统没有关闭交换分区,请把该参数设置为true
- discovery.type 单节点模式
- http.cors.enabled 和 http.cors.allow-origin 主要给elasticsearch-head插件跨域访问使用,否则一直报406的http错误
4.执行docker-compose
docker-compose -f elasticsearch.yml up
-
访问浏览器
elasticsearch-head
ES与RMDB区别
ES与RMDB区别
索引根据通配符搜索
- 搜索所有index,所有type下的所有数据:/_search
- 同时搜索两个index下的数据:/index1,index2/_search
- 按照通配符去匹配多个索引:/1,2/_search
- 搜索一个index下指定的type的数据:/index1/type1/_search
- 搜索一个index下多个type的数据:/index1/type1,type2/_search
- 搜索多个index下的多个type的数据:/index1,index2/type1,type2/_search
- 搜索所有index下的指定type的数据:/_all/type1,type2/_search(_all代表所有index)
等你看到的时候,想变得有一点点不一样