全文检索服务器 Elasticsearch ----------精简核心板

目录

1、ES介绍

        什么是ES

2、ES原理

3、ES客户端

3.1.环境需求:

3.2.配置文件:

3.3.常规配置:

3.4.安装步骤

4、ES入门

 4.1、index管理

4.2、mapping管理

4.3、document管理

5、ik分词器

5.1、安装

5.2、自定义词库

5.3、分词模式

 6、field详细介绍

6.1、field数据类型

6.2、field的属性

type:

analyzer:

index:

source:

6.3、常用field类型

6.3.1、text文本字段

6.3.2、keyword关键字字段

6.3.3、date日期类型

6.3.4、Numeric类型

 6.4、field属性的设置标注

全文检索服务 ElasticSearch其他相关:详尽版


1、ES介绍

        什么是ES

        ElasticSearch是用Java语言开发的,是一个基于Lucene的搜索服务器。对外提供restful接口。

2.ES原理

   正排索引:查字典从第一页开始找,直到找到为止(文档---->关键字)
   倒排索引:查字典时从目录找(关键字---->文档)
          倒排索引表的组成:
                term
                trem------------------------>document
                document
        分词列表的特点:1.不重复    2.“的 地 得 a an the”语气词不参加分词    3.不搜索的filed不参加分词,eg:图片地址

3、ES客户端

3.1.环境需求:

        1、jdk必须是jdk1.8.0_131以上版本。

        2、ElasticSearch 需要至少4096 的线程池、65536个文件创建权限和 262144字节以上空间的虚拟内存才能正常启动,所以需要为虚拟机分配至少1.5G以上的内存

        3、从5.0开始,ElasticSearch 安全级别提高了,不允许采用root帐号启动

        4、Elasticsearch的插件要求至少centos的内核要3.5以上版本

3.2.配置文件:

ES安装目录config中配置文件如下:

        elasticsearch.yml:用于配置Elasticsearch运行参数

        jvm.options:用于配置Elasticsearch JVM设置

        log4j2.properties:用于配置Elasticsearch日志

3.3.常规配置:

cluster.name:
       配置elasticsearch的集群名称,默认是elasticsearch。建议修改成一个有意义的名称。   
node.name:
      节点名,通常一台物理服务器就是一个节点,es会默认随机指定一个名字,建议指定一个有意义的名称,方便管理一个或多个节点组成一个cluster集群,集群是一个逻辑的概念,节点是物理概念,后边章节会详细介绍。
path.data:
       设置索引数据的存储路径,默认是es_home下的data文件夹,可以设置多个存储路径,用逗号隔开。      
path.logs:
       设置日志文件的存储路径,默认是es_home下的logs文件夹         
network.host:  
       设置绑定主机的ip地址,设置为0.0.0.0表示绑定任何ip,允许外网访问,生产环境建议设置为具体的ip。   
http.port: 9200
       设置对外服务的http端口,默认为9200。      
transport.tcp.port: 9300 
       集群结点之间通信端口      
discovery.zen.ping.unicast.hosts:[“host1:port”, “host2:port”, “…”]  
       设置集群中master节点的初始列表。
discovery.zen.ping.timeout: 3s  
       设置ES自动发现节点连接超时的时间,默认为3秒,如果网络延迟高可设置大些。
http.cors.enabled:
       是否支持跨域,默认为false
http.cors.allow-origin:
       当设置允许跨域,默认为*,表示支持所有域名

3.4.安装步骤

安装:

        1、设置虚拟机内存>1.5
        2、创建admin账户,不允许采用root帐号启动。
         

命令:  

        groupadd elk
                    usermod -G elk admin
                    chown -R admin:elk /usr/upload
                    chown -R admin:elk /usr/local
                    su admin


        3、解压安装包

            tar -zxvf elasticsearch-6.2.3.tar.gz -C /usr/local
 


        4、修改配置文件:

                elasticsearch.yml

cluster.name: power_shop
node.name: power_shop_node_1
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: ["192.168.216.137:9300", "192.168.2.138:9300"]
path.data: /usr/local/elasticsearch-6.2.3/data
path.logs: /usr/local/elasticsearch-6.2.3/logs
http.cors.enabled: true
http.cors.allow-origin: /.*/

                jvm.options:        

设置最小及最大的JVM堆内存大小:

在jvm.options中设置 -Xms和-Xmx:

        1) 两个值设置为相等

        2) 将Xmx 设置为不超过物理内存的一半。

默认内存占用太多了,我们调小一些:

-Xms512m
-Xmx512m


        5、修改文件创建权限

       错误信息:

[1]: max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]

        Linux 默认来说,一般限制应用最多创建的文件是 4096个。但是 ES 至少需要 65536 的文件创建权限。我们用的是admin用户,而不是root,所以文件权限不足。

使用root用户修改配置文件:

    su root
            vim /etc/security/limits.conf:
                * soft nofile 65536
                * hard nofile 65536

        
        6、修改线程开启限制

        错误信息:

[2]: max number of threads [3795] for user [es] is too low, increase to at least [4096]

        默认的 Linux 限制 root 用户开启的进程可以开启任意数量的线程,其他用户开启的进程可以开启1024 个线程。必须修改限制数为4096+。因为 ES 至少需要 4096 的线程池预备。

        如果虚拟机的内存是 1G,最多只能开启 3000+个线程数。至少为虚拟机分配 1.5G 以上的内存。

使用root用户修改配置:


            su root
            vim /etc/security/limits.conf:
                *  soft nproc  4096
                *  hard nproc  4096


        7、修改虚拟内存

        错误信息:

[3]: max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]

        ES 需要开辟一个 262144字节以上空间的虚拟内存。Linux 默认不允许任何用户和应用直接开辟虚拟内存。

            su root
            vim /etc/sysctl.conf:
                vm.max_map_count=655360
            sysctl -p

启动和关闭:
        启动:
         

  ./elasticsearch
            #或
            ./elasticsearch -d


        关闭:

.    ps-ef|grep elasticsearch
            kill -9 pid
       


4.ES入门

 4.1、index管理

  创建index

PUT /java2202
            {
                "settings":{
                    "number_of_shards":2,
                    "number_of_replicas":0
                }
            }

      注意:一台服务器时,备份分片的数量必须设置为0,因为主备在同一台上没有意义

删除index

   
            DELETE /Java2202

修改index

  PUT /java2202/_settings
            {
             "number_of_replicas":0
            }

         注意:index一旦创建,主分片数量不可修改,因为:查找时查找到的主片序号跟存入的序号无法对应上。Get时--->hash(id)%number_of_shards

4.2、mapping管理


创建mapping:

  POST /Java2201/course/_mapping
            {
                "properties":{
                    "name":{
                        type:"text"
                    },
                    "description":{
                        type:"text"
                    }
                }
            }

4.3、document管理

创建document:

        POST /java2202/course/1
            {
              "name":"python从入门到放弃",
              "description":"人生苦短,我用Python",
              "studymodel":"201002"
            }

修改document:

        PUT /java2202/course/1
           {
             "name":"python从入门到放弃",
             "description":"人生苦短,我用Python",
             "studymodel":"201002"
           }

查询document:

      GET /Java2202/course/1

删除document:

 DELETE /java2202/course/1

5、ik分词器


5.1、安装


        解压到plug目录下,并重命名为ik


5.2、自定义词库

  IKAnalyzer.cfg.xml:配置扩展词典和停用词典
        main.dic:扩展词典,eg:奥利给
        stopword.dic:停用词典,eg:a、an、the、的、地、得
     

  注意:必须另存为UTF-8


5.3、分词模式

ik分词器有两种分词模式:ik_max_word和ik_smart模式。
        ik_smart:粗粒度,搜索时使用
        ik_max_word:细粒度,往索引目录写时使用

 6、field详细介绍


6.1、field数据类型

 常用:
        文本:text、keyword(往索引目录写不进行分词)
        数字:integer、long、float、double


6. 2、field的属性

type:

        数据类型,通过type属性指定field的类型。如:text、long

"name":{    
       "type":"text"
}

analyzer:

         往索引目录写或搜索时的分词模式,如:analyzer=ik_max_word,analyzer=ik_smart

"name": {
                  "type": "text",
                  "analyzer":"ik_max_word",#生成索引目录时
                  "search_analyzer":"ik_smart"#检索时
 }

index:

        是否往索引目录写,默认为index=true,即要进行索引,只有进行索引才可以从索引库搜索到

"pic": {
         "type":"text",           
       "index":false
}

source:

        document中是否存储,如:includes,excludes

POST /java/course/_mapping
{
  "_source": {
    "includes":["description"]
  }
}

同样,可以通过excludes参数排除某些字段:

 POST /java/course/_mapping
{
  "_source": {
    "excludes":["description"]
  }
}

6.3、常用field类型

6.3.1、text文本字段

        创建新映射:

POST /java/course/_mapping
{
  "_source": {
    "includes":["description"]  #document中存储description
  }  
  "properties": {   
       "name": {
           "type": "text",
           "analyzer":"ik_max_word", #生成索引目录时  精细
           "search_analyzer":"ik_smart" #检索时  粗略
       },         
      "description": {
          "type": "text",
          "analyzer":"ik_max_word",
          "search_analyzer":"ik插入文档: _smart"
      },
      "pic":{
          "type":"text",  #数据类型
          "index":false  #不写入索引目录
      }
  }   
}

        插入文档:

POST /java/course/1
{
  "name":"python从入门到放弃",
  "description":"人生苦短,我用Python",
  "pic":"250.jpg"
}

        查询:

GET /java/course/_search?q=name:放弃
GET /java/course/_search?q=description:人生
GET /java/course/_search?q=pic:250.jpg

结果:name和description都支持全文检索,pic不可作为查询条件

6.3.2、keyword关键字字段

        创建keyword字段往索引目录写时是不进行分词的,比如:邮政编码、手机号码、身份证等。keyword字段通常用于过虑、排序、聚合等

        更改映射:

 POST /java/course/_mapping
{
     "properties": {
       "studymodel":{
          "type":"keyword"
       }
     }
}

        插入文档:

PUT /java/course/2
{
 "name": "java编程基础",
 "description": "java语言是世界第一编程语言",
 "pic":"250.jpg",
 "studymodel": "2010年01月"
}

        根据name查询文档:

GET /java/course/_search?q=studymodel:2010年01月

name是keyword类型,所以查询方式是精确查询。

6.3.3、date日期类型

详见:

全文检索服务 ElasticSearch---------Field

6.3.4、Numeric类型

 详见:

全文检索服务 ElasticSearch---------Field


 6.4、field属性的设置标注

属性标准
type分词是否有意义
index是否搜索,默认为true
source是否展示,默认为展示

7、集群健康状态

status:用三种颜色来展示健康状态

    绿色:正常


   

红色:部分主分片不可用


 

  黄色:部分备份分片不可用

 

 

 

全文检索服务 ElasticSearch其他相关:详尽版

全文检索服务 ElasticSearch---------Ik分词器的使用https://blog.csdn.net/qq_44997403/article/details/126561802ElasticSearch整合SpringBoothttps://blog.csdn.net/qq_44997403/article/details/126548380

全文检索服务 ElasticSearch---------介绍入门及安装https://blog.csdn.net/qq_44997403/article/details/126538960

全文检索服务 ElasticSearch---------集群管理https://blog.csdn.net/qq_44997403/article/details/126561945
全文检索服务 ElasticSearch---------Fieldhttps://blog.csdn.net/qq_44997403/article/details/126561842

                  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值