• elasticsearch(ES)


    1、为什么要使用搜索框架?

    2、Lucene的介绍

    3、Lucene和ES的区别?

    4、ES的安装


    为什么要使用ES或者Lucene?

      之前我们接触的都是模糊查询,,但模糊查询不够准确,有很大的局限性!

      比如:我爱Java          在模糊查询中:%我爱Java%

      但正常情况下我们网页上的搜索:我爱.....;......Java......;......爱Java......;这样的词条的搜索。

      为此我们有了 Lucene搜索框架。

    1、Lucene(Apache公司的,Lucene使用的Java语言)

      Lucene是一个开源的搜索框架,

      Lucene core:核心包(提供了很多的搜索引擎和搜索方法)

      Solr:借助于Lucene core包提供的搜索方法构建的一个高性能的搜索服务器(使用了xml文件类型和http协议)

        并支持json数据格式提供了py和ruby语言的API

      PYLucene:Python语言的Lucene

    2、ES三大核心:

      Index:相当于关系型数据库

      Type:相当于关系型数据库中的表

      Document:相当于关系型数据库中的表数据

    说明

      搜索流程:当服务器端要查询数据时,不会进入数据库中查询,而是进入ES服务器中,先根据Index索引找到对应的库,再根据Type找到对应的表,最后根据Document拿到表数据,一切都是在内存中做计算,内存中的数据则来自于ES服务器中的搜索引擎库中,搜索引擎库中的数据则来自于数据库中。

      搜索引擎库:ES中的搜索引擎库类似于数据库,ES服务器第一次搭建完成后(第一次启动),搜索引擎库中没有数据,需要把数据库中的数据导入到搜索引擎库中(需要进行搜索的数据才会导入进来),ES一旦检测到搜索引擎库中有数据,会把这些数据直接加载进内存中。  

        在ES中自带的有监听机制,监听搜索引擎库中的数据是否有变化,一旦发生变化,需要把搜索引擎库中的数据重新覆盖进内存中。

        ES服务器的缺陷:一旦ES服务器重启,内存就会被释放,ES中的数据就会丢失,所以把需要搜索的数据持久化但硬盘中的搜索引擎库中,当ES开始启动的时候,会把硬盘中的持久化数据加载进内存中,所有的一切数据都是在内存中做计算。

    3、ES是基于Lucene开发的,但是Lucene和ES都是搜索引擎框架

      什么时候使用ES或者说什么时候使用Lucene呢?

      即ES和Lucene的区别: 

        Lucene只是一个搜索架构,不能直接使用,如果需要使用Lucene则需要自己添加代码来实现搜索模块,也就是说必须根据公司的业务逻辑来进行编码搜索,

        ES已经把这些代码全部实现了(在Lucene基础上实现的),可以直接使用,不再需要添加任何和架构有关的代码。

    4、在Linux中配置ES

      (1)先配置jdk

      (2)从官网下载ES安装包

      (3)解压ES的压缩包   tar -zxvf XXXX(仍然是放在/home/apps/下)

      以下配置全部使用root用户,否则配置可能不生效

      (4)vi /etc/security/limits.conf

        配置某个用户/某些用户对软件的内存和硬盘使用权限,

        将下列配置添加进文件内部

        * soft nproc 655350
        * soft nofile 655350
        * hard nproc 655350
        * hard nofile 655350

      (5)最大线程数(ES一般情况是以集群启动的,所以目前的用户无法满足ES所要创建的线程,所以需要加线程数)

        这里只是配置系统可容纳最大线程数,默认系统都有自动保护,不会开启很大的线程数,需要手动修改

        vi /etc/sysctl.conf

        在最后一行添加: vm.max_map_count = 262144

      (6)配置用户最大的线程数:

        vi /etc/security/limits.d/90-nproc.conf

          将其中的1024 改为 4096

      (7)是修改永久生效

        sysctl -p

      (8)创建用户,因为不能直接使用root去启动es,权限太大

        用户名:   useradd  esuser

        密码:    passwd esuser

        授权:     chown  -R esuser /home/apps/elasticsearch

      (9)使用新创建的用户去启动es

        su esuser

        进入bin目录下: ./elasticsearch

      (10)检测是否启动成功:

        浏览器:使用浏览器访问本机服务器的IP+端口号(9200)    

        {
          "name" : "node-1",
          "cluster_name" : "my-cluster",
          "cluster_uuid" : "UmoHkEZzReGQMrrLShhDIQ",
          "version" : {
          "number" : "6.4.0",
          "build_flavor" : "default",
          "build_type" : "tar",
          "build_hash" : "595516e",
          "build_date" : "2018-08-17T23:18:47.308994Z",
          "build_snapshot" : false,
          "lucene_version" : "7.4.0",
          "minimum_wire_compatibility_version" : "5.6.0",
          "minimum_index_compatibility_version" : "5.0.0"
        },
          "tagline" : "You Know, for Search"
        }

     

    在配置中遇到的问题: 

    1.ES为了自我保护,不让使用root用户启动,因为root用户权限过大,容易修改ES自己配置
      创建新的用户并且授权
      useradd esuser
      passwd esuser ---> 123456
      授权:
      chown -R esuser /home/apps/elasticsearch


    2.因为ES需要消耗非常大的线程数量和内存以及硬盘存储空间:

      报错及解决:
      [1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
      [1]:当前启动用户无法对linux系统调动很多的硬盘以及内存存储空间,所以需要自行修改!
        vi /etc/security/limits.conf
      [2]: max number of threads [1024] for user [esuser] is too low, increase to at least [4096]
      [2]:当前启动的用户太low了,无法调动很多的线程(默认只能调动1024)
        vi /etc/secrity/limits.d/90-nproc.conf
      [3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
      [3]:需要配置vi /etc/sysctl.conf文件,加大系统默认的总线程数


    3.使用创建出新用户启动没有问题,但是当使用root用户启动一次后,再使用新创建的用户启动就有问题
      新创建的用户无法使用root用户所创建出的文件
      无论是使用哪一个用户启动都会在config文件夹中创建elasticsearch.keystore文件,root用户权限太大,创建的文件其他用户无法使用,所以会报错!


    4.java.lang.UnsupportedOperationException: seccomp unavailable: CONFIG_SECCOMP not compiled into kernel,     CONFIG_SECCOMP and CONFIG_SECCOMP_FILTER are needed
      因为最终CONFIG_SECCOMP系统在centos7中默认会被加载,但是在centos6中没有
        需要更换centos的版本
        1、6版本---->7版本
        2、修改es的配置文件
        在yml配置文件中添加一行数据 :  bootstrap.system_call_filter: false

    乾坤未定,你我皆是黑马
  • 相关阅读:
    Linux下Keepalived 安装与配置
    Nginx配置SSL证书部署HTTPS网站
    Nginx 实现MySQL的负载均衡
    iOS如何把导航默认的返回按钮设置成“返回”
    Java中JSON的简单使用与前端解析
    双机高可用、负载均衡、MySQL(读写分离、主从自动切换)架构设计
    iOS开发--使用RSA加密
    UIBezierPath画圆弧的记录
    SSL构建单双向https认证
    webpack配置上线地址
  • 原文地址:https://www.cnblogs.com/liuqijia/p/11508535.html
Copyright © 2020-2023  润新知