一、安装

1.下载es: https://www.elastic.co/downloads/past-releases/elasticsearch-5-6-8

2.运行:下载后解压,进入到bin目录,执行:elasticsearch。浏览器输入http://localhost:9200/测试是否启动

3.安装head插件(用于可视化操作es)

1)下载head插件:https://github.com/mobz/elasticsearch-head

2)解压到任意目录,但是要和elasticsearch的安装目录区别开

3)安装node js ,安装cnpm

4)全局安装grunt 。Grunt是基于Node.js的项目构建工具。它可以自动运行你所 设定的任务



npm install -g grunt-cli



5)安装依赖



cnpm install



6)进入elasticsearch-head目录启动head



grunt server



7)浏览器输入http://localhost:9100/测试head插件是否成功安装

8)在页面上方文本框输入es的地址(端口9200),点击连接按钮出现跨域问题

4.在es目录下的config/elasticsearch.yml添加两行使es能被head等插件跨域访问。改配置后重启es:



http.cors.enabled: true
http.cors.allow-origin: "*"



5.安装IK分词器 

1)下载ielasticsearch-analysis-ik-5.6.8.zip。下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases

2)解压zip,重命名解压后的目录为ik,拷贝到elasticsearch/plugins目录

3)重启es

4)浏览器测试ik分词器:



http://localhost:9200/_analyze?analyzer=ik_max_word&pretty=true&text=我是程序员 //其中ik_max_word为最多切分,ik_smart为最少切分



5)自定义词库

a.进入elasticsearch/plugins/ik/config目录

b.新建一个my.dic文件,编辑内容:

es如何使用 es的安装和使用_es如何使用

c.修改elasticsearch/plugins/ik/config/IKAnalyzer.cfg.xml



<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>



d.重启es。测试



http://localhost:9200/_analyze?analyzer=ik_max_word&pretty=true&text=人艰不拆



 

二、使用

1.以Restful方式操作ES

● 新建一个名为articleindex索引。PUT请求



http://127.0.0.1:9200/articleindex/



● 查询全部文档。GET请求



http://127.0.0.1:9200/articleindex/article/_search



● 创建/修改文档(如果不存在_id为1的文档则会创建,反之则会修改)。PUT请求



http://192.168.184.134:9200/articleindex/article/1



● 按I_id查询文档。GET请求



http://192.168.184.134:9200/articleindex/article/1



● 基本匹配查询(查title为“好给力”的文档)。GET请求



http://192.168.184.134:9200/articleindex/article/_search?q=title:好给力



● 模糊查询。GET请求



http://192.168.184.134:9200/articleindex/article/_search?q=title:*s*



● 删除文档。DELETE请求



http://192.168.184.134:9200/articleindex/article/1



 2.SpringDataElasticSearch

0)因为elasticsearch从5版本以后默认不开启远程连接,需要修改es目录下config/elasticsearch.yml,添加一行



transport.host: 0.0.0.0



如果不加上会出现NoNodeAvailableExceptionn[None of the configured nodes are available

其中0.0.0.0表示允许任何ip远程连接es。如果项目上线需要指定ip有权限访问

1)添加依赖



<dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-elasticsearch</artifactId>
            <version>3.0.6.RELEASE</version>
        </dependency>



2)application.yml文件配置



spring:
  data:
    elasticsearch:
      cluster-nodes: 127.0.0.1:9300 #java操作es用的是9300端口



3)实体类



@Document(indexName = "tenpower", type = "article")
public class Article implements Serializable {
    @Id
    private String id;

    @Field(analyzer = "ik_max_word", searchAnalyzer = "ik_max_word")
    private String title; //文章标题

    @Field(analyzer = "ik_max_word", searchAnalyzer = "ik_max_word")
    private String content;//文章正文

    private String status; //审核状态

    //Getter and Setter ...
}



4)Dao。也是SpringData风格



public interface ArticleSearchDao extends ElasticsearchRepository<Article,String> {
}



 3.logstash使用

1)解压logstash,然后在解压目录下创建mysqletc目录(名称随意)

2)在该目录下创建mysql.conf(名称随意),内容如下(需要修改配置):



input {
  jdbc {
      # mysql jdbc connection string to our backup database
      jdbc_connection_string => "jdbc:mysql://192.168.25.129:3306/tensquare_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 => "E:/logstash-6.7.0/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 => "localhost:9200" 
      #ES索引名称(自己定义的)
      index => "tenpower"
      #自增ID编号
      document_id => "%{id}"
      document_type => "article"
  }
  stdout {
      #以JSON格式输出
      codec => json_lines
  }
}



3)将mysql驱动包mysql-connector-java-5.1.46.jar拷贝到mysqletc目录下

4)在logstash的bin目录下执行



logstash -f ../mysqletc/mysql.conf



过一会可以看到执行成功log

es如何使用 es的安装和使用_数据库_02

 

三、docker下安装es

1.安装es



#下载镜像
docker pull elasticsearch:5.6.8
#运行容器
docker run -di --name=es -p 9200:9200 -p 9300:9300 elasticsearch:5.6.8



2.修改application.yml将ip地址改为宿主机的ip地址

3.进入容器修改/usr/share/elasticsearch/config下的elasticsearch.yml,追加



#防止出现NoNodeAvailableException异常
transport.host: 0.0.0.0 
#允许head插件跨域访问
http.cors.enabled: true
http.cors.allow-origin: "*"



4.修改宿主机系统配置

1)vi /etc/security/limits.conf,追加



* soft nofile 65536
* hard nofile 65536



其中nofile是单个进程允许打开的最大文件个数,soft nofile是软限制,hard nofile是硬限制

2)vi /etc/sysctl.conf,追加



vm.max_map_count=655360



表示限制一个进程可以拥有的VMA(虚拟内存区域)的数量

3)执行下面命令 修改内核参数马上生效



sysctl -p



5.ik分词器安装和win下安装一样

6.安装head插件

1)下载镜像



docker pull mobz/elasticsearch-head:5



2)运行head容器



docker run -di --name=es-head -p 9100:9100 mobz/elasticsearch-head:5



 7.logstash同win