全文搜索引擎ElasticSearch+LogStash插件

ElasticSearch+LogStash

  • ElasticSearch介绍
  • ElasticSearch安装
    • 安装
    • 配置文件
    • es启动
    • head插件安装
  • ES快速入门
    • 创建索引库
    • 创建映射
    • 创建文档
    • 搜索文档
  • IK分词器
  • 映射
    • 映射维护方法
    • 常用映射类型
  • Java集成ES搜索

ElasticSearch介绍

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。ElasticSearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

elasticsearch是一个基于Lucene的高扩展的分布式搜索服务器,支持开箱即用。
elasticsearch隐藏了Lucene的复杂性,对外提供Restful 接口来操作索引、搜索。
突出优点:
1、扩展性好,可部署上百台服务器集群,处理PB级数据。
2、近实时的去索引数据、搜索数据。

ElasticSearch安装

安装

支持Window(推荐使用zip安装方式)、docker安装方式(后续更新),本文使用Window安装方式。

  1. 下载并解压Elasticsearch 6.2.1.zip

百度网盘链接: 点击此处,提取码:3ujq

  1. 目录结构介绍
    全文搜索引擎ElasticSearch+LogStash插件_第1张图片

bin:脚本目录,包括:启动、停止等可执行脚本
config:配置文件目录
data:索引目录,存放索引文件的地方
logs:日志目录
modules:模块目录,包括了es的功能模块
plugins :插件目录,es支持插件机制

配置文件

  1. elasticsearch.yml(主要)

    作用:用于配置Elasticsearch运行参数
    内容:

    cluster.name: xuecheng      #集群名称
    node.name: xc_node_1		#节点名
    network.host: 0.0.0.0		#ip	
    http.port: 9200				#配http的端口
    transport.tcp.port: 9300	#es内部通讯的端口
    node.master: true			#是否为主节点,true为是,false为否
    node.data: true				#是否为数据节点(仅存储数据),true为是,false为否
    discovery.zen.ping.unicast.hosts: ["0.0.0.0:9300", "0.0.0.0:9301"]	#设置集群中master节点的初始列表
    discovery.zen.minimum_master_nodes: 1#主结点数量的最少值 ,此值的公式为:(master_eligible_nodes / 2) + 1
    node.ingest: true
    bootstrap.memory_lock: false
    node.max_local_storage_nodes: 2 #单机允许的最大存储结点数
    
    path.data: D:\ElasticSearch\elasticsearch-6.2.1-1\data #配置es的data文件夹路径
    path.logs: D:\ElasticSearch\elasticsearch-6.2.1-1\logs #配置es的logs文件夹路径
    
    http.cors.enabled: true		#是否开启跨域,true为是,false为否
    http.cors.allow-origin: /.*/ #允许所有域名
    
  2. jvm.options

    作用:设置最小及最大的JVM堆内存大小

    在jvm.options中设置 -Xms和-Xmx:
    1) 两个值设置为相等
    2) 将 Xmx 设置为不超过物理内存的一半。

  3. log4j2.properties

    作用:日志文件设置,ES使用log4j,注意日志级别的配置。

es启动

在elasticsearch-6.2.1的bin目录下,双击elasticsearch.bat即可启动。浏览器输入:http://localhost:9200。

head插件安装

  1. elasticsearch-head服务
    在elasticsearch-head的目录下,用cmd执行npm run start命令即可启动。浏览器输入:http://localhost:9100。

    注意事项:需要node.js环境

  2. chrome-elasticsearch-head谷歌插件
    在谷歌浏览器中的“更多工具”→“扩展程序”→“加载已解压的扩展程序”,选择chrome-elasticsearch-head下的0.1.5_0版本

    注意事项:需要保存好该文件,如果该文件删除了,则该插件也就没有了。

ES快速入门

ES作为一个索引及搜索服务,对外提供丰富的REST接口,快速入门部分的实例使用head插件来测试,目的是对ES
的使用方法及流程有个初步的认识。记住流程:索引库→映射→文档→搜索。

创建索引库

关键字:settings

  • 使用Postman进行创建:

    put 请求: http://localhost:9200/索引库名称

    {
      	"settings":{
    	  	"index":{
    	      	"number_of_shards":1,  #设置分片的数量
    	      	"number_of_replicas":0 #设置副本的数量
    		}    
    	}
    }
    

    number_of_shards:设置分片的数量
    number_of_replicas:设置副本的数量

  • 使用head插件进行创建:
    全文搜索引擎ElasticSearch+LogStash插件_第2张图片

创建映射

关键字:mapping

  • 使用Postman进行创建:
    发送 :post 请求 http://localhost:9200/索引库名称 /类型名称/_mapping
    例子:post http://localhost:9200/test/doc/_mapping
    表示:在 test索引库下的doc类型下创建映射。doc是类型名,可以自定义。在ES6.0中要弱化类型的概念,
    给它起一个没有具体业务意义的名称。

     {
    	 "properties": {   
             "name": {
                 "type": "text"
              },
              "description": {
                 "type": "text"
              },
              "enabled": {
                 "type": "keyword"
             }
        }
    }
    

创建文档

发送:put 或 post 请求 http://localhost:9200/索引库名称 /类型名/id值(如果不指定id值ES会自动生成ID)
例子:put 或 post http://localhost:9200/test/doc/1

 {
    "name": "java开发语言",
    "description": "最大支持两颗处理器/最大支持512G内存/1个PCI-E 3.0 x16/最大支持3块3.5热插拔硬盘/2×1G RJ45 端口,1×IPMI管理接口(RJ45)",
    "enabled": "1"
}

搜索文档

发送:get http://localhost:9200/索引库名称 /类型名/id值
例子:get http://localhost:9200/test/doc/1

结果说明:
took:本次操作花费的时间,单位为毫秒。
timed_out:请求是否超时
_shards:说明本次操作共搜索了哪些分片
hits:搜索命中的记录
hits.total : 符合条件的文档总数 hits.hits :匹配度较高的前N个文档
hits.max_score:文档匹配得分,这里为最高分
_score:每个文档都有一个匹配度得分,按照降序排列。
_source:显示了文档的原始内容。

IK分词器

  • 安装IK分词器
    解压,并将解压的文件拷贝到ES安装目录的plugins下的ik目录下(安装包在网盘中)

  • 两种分词模式

  1. ik_max_word
    会将文本做最细粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为“中华人民共和国、中华人民、中华、
    华人、人民共和国、人民、共和国、大会堂、大会、会堂等词语。

    一般索引分词用 ik_max_word 分词模式。

  2. ik_smart
    会做最粗粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为中华人民共和国、人民大会堂。

    一般搜索分词用 ik_smart分词模式,为了直接查询到用户想要的查询的数据。

  • 测试IK分词器
    发送:post localhost:9200/_analyze

    ik_max_word测试:

    	{
    		"text":"中华人民共和国人民大会堂",
    		"analyzer":"ik_max_word" 
    	}
    

    ik_smart测试:

    	{
    		"text":"中华人民共和国人民大会堂",
    		"analyzer":"ik_smart" 
    	}
    
  • 自定义词库
    如果要让分词器支持一些专有词语,可以自定义词库。
    iK分词器自带一个main.dic的文件,此文件为词库文件。
    全文搜索引擎ElasticSearch+LogStash插件_第3张图片

  1. 在上边的目录中新建一个my.dic文件(注意文件格式为utf-8(不要选择utf-8 BOM))

  2. 修改IKAnalyzer.cfg.xml的ext_dict
    全文搜索引擎ElasticSearch+LogStash插件_第4张图片

映射

映射维护方法

  1. 查询所有索引的映射:
    GET: http://localhost:9200/_mapping
  2. 创建映射
    Post:http://localhost:9200/xc_course/doc/_mapping
    	 {
     		 "properties": {   
    	         "name": {
    	             "type": "text"
    	          },
    	          "description": {
    	             "type": "text"
    	          },
    	          "enabled": {
    	             "type": "keyword"
    	         }
            }
    	}
    
  3. 更新映射
    映射创建成功可以添加新字段,已有字段不允许更新。
  4. 删除映射
    通过删除索引来删除映射。

常用映射类型

  • 文本类型
  1. text:
    1) analyzer:索引分词
    取值:ik_max_word(推荐)、ik_smart

    2)search_analyzer:搜索分词
    取值:ik_max_word、ik_smart(推荐)

    3)index:建立索引
    取值:true(默认)、false

  2. keyword:
    通常搜索keyword是按照整体搜索,所以创建keyword字段的索引时是不进行分词的,比如:邮政编码、手机号码、身份证等。

  • date日期类型
  1. format:日期格式(支持年月日时分秒、年月日及毫秒三种格式)
    取值: “yyyy‐MM‐dd HH:mm:ss||yyyy‐MM‐dd||epoch_millis”

    注意事项:日期类型不用设置分词器,通常日期类型的字段用于排序。

  • 数值类型
    es支持的数值类型很多,比如long、integer、short、double等。

Java集成ES搜索

这里不详细讲,在网盘的doc文件夹下有详细的讲解,如上只是对ElasticSearch一个简单的介绍,纯属个人笔记。

你可能感兴趣的:(知识收集库)