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":{} } } }