snake107

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的映射,每个关键词都对应着一系列的文件,这些文件中都出现这个关键词。

img

文档列表

img

简单的倒排索引

Docker 安装 ElasticSearch

1.创建目录,目录结构树如下:

img

目录结构

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

ES与RMDB区别

img

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)
posted @ 2019-11-26 22:29  爱喝奶茶的皮卡丘  阅读(177)  评论(0编辑  收藏  举报