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

  

  

 
 
posted @ 2020-08-01 23:45  Money131  阅读(305)  评论(0编辑  收藏  举报