elasticsearch安装以及 注意的点
1.原数据同步问题。。。
数据库.conf 同步文件
input {
jdbc {
# mysql jdbc connection string to our backup databse
#数据连接地址
jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/123?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 => "F:\SSM\za\Search\logstash-5.6.8\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 => "50"
#以下对应着要执行的sql的绝对路径。
#提取数据复杂 写入文件 指定sql文件路径
#statement_filepath => ""
#简单 直接写sql
statement => ""
#定时字段 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新(测试结果,不同的话请留言指出)
schedule => "* * * * *"
}
}
output {
elasticsearch {
#ESIP地址与端口
#更新到对应的Elasticsearch 的地址中
hosts => "localhost:9200"
#ES索引名称(自己定义的)
#指定索引库
index => "tensquare"
#自增ID编号
document_id => "%{id}"
#类型 在 elasticsearch 索引库中查看
document_type => "article"
}
stdout {
#以JSON格式输出
codec => json_lines
}
}
2.对搜索文件过滤: F:\SSM\za\Search\elasticsearch-5.6.8\elasticsearch-5.6.8\plugins\ik\config
文件:IKAnalyzer.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">my.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords"></entry>
<!--用户可以在这里配置远程扩展字典 -->
<!-- <entry key="remote_ext_dict">words_location</entry> -->
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
3.实体类中
//项目名 //表名 @Doument(indexName="tensquare_",type = "article") 文件上 @Field(index = true,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word") 需要分词的字段
4.Dao层
使用Spring Data Dao层实现ElasticsearchRepository<实体类,String>
5.Controller层
跨域请求 @CrossOrigin
6.同步数据 ( 7.6elasticsearch + head插件 + ik(放在es的Plugins文件夹) + kibana 部署)
6.1 解压elasticsearch 文件夹, (查看 bin目录下 elasticAearch.yml 的 占用内存是否过大 )
6.2 启动elasticSearch
elasticsearch (直接进es的bin目录启动elasticsearch.bat 都一样的)
6.3 安装head 插件 依赖npm
//安装路径在 head 插件中 -- //不同版本 部署 需要安装head插件 的 //F:\SSM\SearchAndRabbitMQ\ElasticSearch7.6\win\elasticsearch-head-master\elasticsearch-head-master cnpm install
6.4 启动 npm
npm run start (在head插件中启动)
6.5 解决 elasticsearch 跨域问题
//在 /elasticsear7.6/config/elasticsearch.yml 中添加 //修改文件需要重启 http.cors.enabled: true http.cors.allow-origin: "*"
6.6 安装kibana
//解压 直接在bin目录点击 kibana.bat 启动项目的时候, 重新启动elaticSearch (不重启,kibana 可能不能正常启动)
6.6.1启动成功截图
6.6.2 启动失败
//解决方法:将es npm 和 kibana 重启
6.7 修改kibana 汉化 在kibana的conf 文件 中添加
//注释掉原来的 i18n.locale: "en" i18n.locale: "zh-CN"
6.8采用Logstash
//写在文件
logstash -f 文件路径
//手动输入
logstash -e 'input { stdin{ } } output { shout { }}'
7logstash 同步数据库
7.1.连带数据库连接jar包放在logstash
7.2 注意执行文件 内容(文件中有注释)
转开篇代码
7.3
//执行脚本 //在logstash的bin文件中执行 脚本 logstash -f ../mysqletc/mysql.conf
7.4
注意的点 , 删除数据不能删除,只能修改状态。
7.5logstash 存在 实时更新的问题
全文倒排索引 --- 倒排索引的特例
实时更新比较难处理,站内搜索是否需要
8. elasticsearch 概念理解
elasticsearch 面向文档 对比 数据库 数据库 --> 索引(index 重点) 表 --> types 行 --> docunents (文档) 字段 --> fields es在在后台将索引划分切片
9.在kibana 中 进行分词
//ik_smart 最少切分
GET _analyze
{
"analyzer":"ik_smart",
"text":"苏维埃克格勃,红旗倒下,苏联解体"
}
//ik_max_word 最细切分 (现在更智能了,5.6版本最细切分就是按字切分,7.6版本按词语切分)
GET _analyze
{
"analyzer":"ik_max_word",
"text":"苏维埃克格勃,红旗倒下,苏联解体"
}
9.1自定义分词 .dic文件默认 分词文件
9.2配置自己的 查询字典
9.3 对索引库创建 增加 删除,修改、
//修i该 索引test3 , id =2 的数据
PUT /test3/_doc/2
{
"name":"苏维埃博克格,红旗倒下,苏联解体"
"age":13
"birth":"1995-01-09"
}
//获取 索引库test2的数据
GET /test2
// 查看集群状态
GET _cat/indices?v
//建议 修改形式 POST + _update
POST /test2/_doc/1/_update
{
"doc":{
"name":"俄罗斯"
}
}
// 创建索引库kuangshen 类型 user 编号 1
//Rest Full 风格 使用PUT 进行修改数据 会将 原数据覆盖掉
//推荐 POST + _update 可以修改某一列的值
PUT /kuangshen/user/1
{
"name":"狂神说",
"age":14,
"desc":"hellow world java后端猛如虎",
"tags":["技术栈","痛恨女权","指南"]
}
复杂查询
//俩个 查询方式
GET kuangshen/user/_search?q=name:狂神说
GET kuangshen/user/_search
{
"query":{
"match":{
"name":"狂神"
}
}
}
多值查询
//_source 结果过滤
GET kuangshen/user/_search
{
"query":{
"match":{
"name":"狂神"
}
}
, "_source": ["name","age"]
}
排序
//sort 排序 desc 降序
GET kuangshen/user/_search
{
"query":{
"match":{
"name":"狂神"
}
},
"sort": [
{
"age": {
"order": "desc"
}
}
]
}
分页
// from 从第几个数据开始 size 返回多条数据
GET kuangshen/user/_search
{
"query":{
"match":{
"name":"狂神"
}
},
"sort": [
{
"age": {
"order": "desc"
}
}
],
"from": 0,
"size": 20
}
//注释 数据下标 从0开始。
多条件查询
//bool 多条件精确查询 must(相当于sql中and) 命令需要将条件都匹配 才返回 结果
GET kuangshen/user/_search
{
"query": {
"bool": {
"must": [
{"match": {
"name": "狂神说"
}},
{
"match": {
"age": 14
}
}
]
}
}
}
// should (相当于sql 中 or) 命令 只要复核其中一个条件 就返回 相应数据。
GET kuangshen/user/_search
{
"query": {
"bool": {
"should": [
{"match": {
"name": "狂神说"
}},
{
"match": {
"age": 14
}
}
]
}
}
}
// must_nat 过滤数据 查询 名字不是 狂神说,年龄不是14 的人
GET kuangshen/user/_search
{
"query": {
"bool": {
"must_not": [
{"match": {
"name": "狂神说"
}},
{
"match": {
"age": 14
}
}
]
}
}
}
gt 大于
gte 大于等于
lt 小于
lte 下雨等于
// 查询年龄大于10,小于20 的人 多条件过滤
GET kuangshen/user/_search
{
"query": {
"bool": {
"filter": {
"range": {
"age": {
"gte": 10,
"lte": 20
}
}
}
}
}
}
//多条条件 查询 tags 使用空格隔开 进行多条件 查询(只要满足其中一个结果,就返回结果)
GET kuangshen/user/_search
{
"query": {
"match": {
"tags":"男 技术"
}
}
}
//数据类型 不相同 时, 解析数据 会出现差别
//当 name是 text 类型,desc为keyword类型, 查询 name 则能查询出数据, 查询 desc 则返回null (原因是desc 不能被解析)
PUT testdb1
{
"mappings": {
"properties": {
"name":{
"type": "text"
},
"desc":{
"type": "keyword"
}
}
}
}
//精确查询 多个值
GET testdb1/_search
{
"query": {
"bool": {
"should": [
{
"term": {
"t1":"t2"
}
},
{
"term": {
"t2":"12"
}
}
]
}
}
}
//高亮
GET kuangshen/user/_search
{
"query": {
"match": {
"name": "狂神说"
}
}
, "highlight": {
"pre_tags": "<p class='key' style='color:red'>",
"post_tags": "</p>",
"fields": {
"name":{}
}
}
}

浙公网安备 33010602011771号