elasticSearch新认知
之前已经学习使用过ElasticSearch的使用,今天补充巩固一下...
上一次的环境是在 linux下使用 EalsticSearch(安装教程详见:https://www.cnblogs.com/msi-chen/p/10335794.html),
今天的笔记内容为:
1.今天的环境我windows本地使用和 docker内的使用;
2.Head插件在windows和docker的简单配套使用;
3.logstash 完成mysql 和 ES 的数据同步;
ES相对于solr:在面对实时查询大数据量数据时提供强劲的查询速度,无需过多配置支持分布式,开箱即用,
ES的体系结构: 索引 ( index ) ——> 类型 ( type ) ——> 文档 ( document )
在 windows 上的使用:
ES 在windows上的使用,没有 Linux上的复杂配置,解压开箱即用即可
提供服务的ES提供了两个接口以供调用 9200(其他), 9300 (java)
ES是基于Resyful web接口的,我们可以使用 rest请求 对其进行简单操作
比如put提交新建索引,post提交新建文档,get提交查询文档,delete提交删除文档...不多赘述
Head插件的安装与使用:
ES有跨域保护,默认不允许跨域调用,Head想调用需要修改相关配置:
elasticsearch.yml 追加两个配置:
http.cors.enabled: true
http.cors.allow‐origin: "*"
安装node js ,安装cnpm : npm install ‐g cnpm ‐‐registry=https://registry.npm.taobao.org
将 grunt 安装我全局命令 : npm install ‐g grunt‐cli
安装依赖 : cnpm install
cmd 找到解压目录 : grunt server 运行即可,访问:localhost:9100
在这里,我们可以看到我们创建了一个名为 myTest 的索引,这个工具着实是简陋,下面我们来粗略的了解一下
创建索引:
整个页面很简单,多熟悉熟悉即可(put 可用于创建,如果已经被创建,则视为修改)
接下来就是了解一下 IK 分词器:
ES 默认自带的中文分词器是一个字为一个词,显然这个不是偶棉想要的结果
于是便引入了现在很流行的 IK分词器,配置也很简单:
将 IK分词器解压到 elasticsearch/plugins / 重启ES服务即可
IK分词器 提供了两种分词算法:
ik_smart :最少切分
iik_max_word :最细粒度划分
测试:
http://127.0.0.1:9200/_analyze?analyzer=ik_smart&pretty=true&text=我喜欢快乐
http://127.0.0.1:9200/_analyze?analyzer=ik_max_word&pretty=true&text=我喜欢快乐
然后就是自定义词库,会把一些没有收纳为词条的字段自定义为词条
自定义以 .dic为尾缀的文件 比如: custom.dic
在其内部第一行空格 下一行键入你要的词条: 比如 人艰不拆(注意保存格式诶utf-8)
人艰不拆这个词本来不是词语,现在我们将其作为自定义词条加入分词器
再次测试:
接下来就是 java 代码的运用了,在与数据库的交互中,我们都要创建一个实体类作为结果反射的容器,
在ES中也是一样的,也需要创建一个实体类,用作装载查询到的数据
在ES中有三个概念比较重要,可以理解一下:
是否索引:就是看该字段是否能被作为检索字段被搜索
是否分词 : 搜索的时候是整体匹配,还是分词词条匹配
是否存储:就是在查询结果上,设置是否显示出来
其次就是配置整合需要的 ES 的ip 及 port (java的端口是 : 9300)
然后就是持久层对 ES 的访问了,我们只需要定义接口继承 ElasticsearchRepository<T, ID>
是不是很这种玩法很熟悉,再给你一个列子看
换汤不换药,还是原来的味道,还是原来的配方。然后就可以愉快的搬砖了......
接下来的笔记为 ES 和 MySQL 的数据同步: LogStash
网上对LogStash的介绍为 : Logstash可以动态地将来自不同数据源的数据统一起来,并将数据标准化到你所选择的目的地。
在 ES 上的运用表现为: 定时将 MySQL中的数据 刷新到 ES ,完成数据更新同步
开箱即用,bin目录中调用 cmd : logstash -e 'input { stdin { } } output { stdout {} }' (测试语法)
-e :是执行,当命令很短时,可以运用这个语法,一般我们都是运行文件
-f : 跟路径,读取配置文件执行命令,一般用这种
开箱使用:
在解压文件夹内创建一个文件夹(随意,读取里面的配置文件)
在该文件夹内创建一个以 .conf 为尾缀的配置文件
文件内容如下: (酌情改动,以自己的配置为主)
input {
jdbc {
# mysql jdbc connection string to our backup databse
jdbc_connection_string => "jdbc:mysql://192.168.41.130:3306/article?characterEncoding=UTF8"
# the user we wish to excute our statement as
jdbc_user => "root"
jdbc_password => "123456"
# the path to our downloaded jdbc driver
jdbc_driver_library => "C:\MyFrame\logstash-5.6.8\mysqletc\mysql-connector-java-5.1.46.jar"
# the name of the driver class for mysql
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
#以下对应着要执行的sql的绝对路径。
#statement_filepath => ""
statement => "select id,title,content from tb_article"
#定时字段 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新(测试结果,不同的话请留言指出)
schedule => "* * * * *"
}
} output {
elasticsearch {
#ESIP地址与端口
hosts => "127.0.0.1:9200"
#ES索引名称(自己定义的)
index => "article_es"
#自增ID编号
document_id => "%{id}"
document_type => "article"
}
stdout {
#以JSON格式输出
codec => json_lines
}
}
然后在 bin 中执行 : logstash -f ../mysqletc/mysql.conf
然后就可以看到控制台在为我们刷数据到 ES中的,一分钟后刷新 Head
已经实现数据的同步,接下里我们启动代码看看
elasticSearch新认知的更多相关文章
- Elasticsearch 新机型发布,性能提升30%
跨年迎双节,2020 年最后一次囤货的机会来啦! Elasticsearch Service 星星海新机型发布,更高性能,更低价格. 爆款机型限时特惠,帮助您顺畅体验 Elasticsearch 云上 ...
- es6 解构赋值 新认知/新习惯
es6 的解构赋值其实很早就学习了,但一直纠结于习惯和可读性问题,所以没有大规模使用.最近被 react调教一番之后.已经完全融入认知和习惯中去了.总结一下三个常用的技巧: 对象取值 取值并重命名 剩 ...
- elasticsearch新加入节点不能识别问题
向ES集群中新加入节点,配置文件也没有什么问题,但是就是加不进去,这时候就需要检查一下防火墙是否开启.关闭即可
- 有关Asp.net 中数据请求的处理的新认知:利用httpHandlers
转自csdn:HttpHandler HttpHandler是HTTP请求的处理中心,真正地对客户端请求的服务器页面做出编译和执行,并将处理过后的信息附加在HTTP请求信息流中再次返回到Http ...
- Echarts 新认知 地图的label到底怎么居中?
试过了offset和很多Api,都无法实现label居中 后来无意中发现,原来在geojson注册的时候,可以定义 properties.cp 属性,实现文本的坐标自定义,实现居中. echarts. ...
- 温故而知新: 关于 js Form 方式提交的一些新认知
这里介绍的是通过js进行异步form提交,而不是表单Form Submit提交. 提交方式主要有以下两种: 参数为字符串方式的提交,如:a=b&c=d formData方式提交, 如:new ...
- PHP error_log 新认知
//error_log 简介及使用方法 // error_log("消息","类型","路径"); //message //type ...
- 新认知之WinForm窗体程序
Windows应用程序和控制台应用程序有很大的区别 >Form1.cs :窗体文件,程序员对窗体编写的代码一般都存放在这个文件中. >Form1.Designer.cs :窗体设计文件, ...
- 工控PLC中,关于定时器TON,TOF,的一点新认知,或者说醒悟吧!
PLC 中的定时器,都是放在一个具体PRG任务单元中的,而PRG单元需要放在具体固定的周期循环任务中才能被执行,而这个周期循环任务的循环周期 T: 与定时器的定时时间T0: T与T0 的数量级 ...
随机推荐
- 处理ajax数据;数据渲染
当我们用ajax把数据拿到前台,该如何渲染到页面,有以下几种方式: 一:使用字符串拼接的方法 声明一个空变量,然后拼接 var st=""; st+="<div&g ...
- scrapy 爬取智联招聘
准备工作 1. scrapy startproject Jobs 2. cd Jobs 3. scrapy genspider ZhaopinSpider www.zhaopin.com 4. scr ...
- python 数据可视化 -- 生成可控的随机数据集合
生成可控的随机数据集合 使用 numpy.random 模块 numpy.random.random(size=None) 返回 [0.0, 1.0) 区间的随机 floats, 默认返回一个 fl ...
- Siamese Neural Networks for One-shot Image Recognition
one-shot learning简介 这是迁移学习的两种极端形式 zero-shot learning 指的是我们之前没有这个类别的训练样本,但是我们可以学习到一个映射X->Y, 如果这个映射 ...
- 【此处有干货~】jmeter+ant+jenkins持续集成配置及过程中问题解决思路
本人是一枚工作近三年的小测试,大学正好专业为软件测试,在工作中用到最多的是功能测试.接口测试.压力测试.偶尔会涉及到性能测试......(小白,很多观念技术跟大佬差距太大,勿喷) 在接口测试过程当中, ...
- react native 学习笔记
假设你的机器现在还没安装任何环境. 不同的操作系统.不同的目标平台,具体的步骤也会有所不同.如果你想同时开发android和ios也没问题,只需要先选一个平台开始,另一个平台的环境搭建只是稍有不同 本 ...
- typeof 和 instanceof apply与call简单用法以及判断数组的坑
1 typeof 和 instanceof var array = [];平时如果判断一个对象是否为数组,可能你会用 typeof array,但是输出为“object”. typeof 一般只能返回 ...
- 构造 this super
构造方法 我们对封装已经有了基本的了解,接下来我们来看一个新的问题,依然以Person为例,由于Person中的属性都被private了,外界无法直接访问属性,必须对外提供相应的set和get方法.当 ...
- day31并发
以后你为之奋斗的两点: 提高cpu的利用率 提高用户的体验 1.纯概念/纯方法 操作系统的发展历程 #主要的人机矛盾是什么:CPU的使用率 #输入\输出数据和CPU计算没有关系 #操作系统是怎么进化 ...
- 学习Acegi应用到实际项目中(6)
在企业应用中,用户的用户名.密码和角色等信息一般存放在RDBMS(关系数据库)中.前面几节我们采用的是InMemoryDaoImpl,即基于内存的存放方式.这节我们将采用RDBMS存储用户信息. Us ...