为了账号安全,请及时绑定邮箱和手机立即绑定

ElasticSearch 遇见(1)

标签:
Java
希望给同样遇见es的你带来帮助,也希望彼此有更多的讨论
版本选择6.4.3
1-安装
2-索引的创建

ElasticSearch 6.x 安装

  • 安装ElasticSearch
解压:tar -xzvf elasticsearch-6.4.3.tar.gz
添加非root用户(启动中遇见其他权限问题,只要修改权限为elasticsearch用户就可以):
groupadd elasticsearch
useradd elasticsearch -g elasticsearch
chown -R elasticsearch:elasticsearch elasticsearch-6.4.3

su elasticsearch 启动:sh ./bin/elasticsearch   后台启动:sh ./bin/elasticsearch -d

启动的问题:(max file descriptors [4096] for elasticsearch process is too low......)
vi /etc/security/limits.conf    新增
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
修改配置文件sysctl.conf
vi /etc/sysctl.conf
添加下面配置:
vm.max_map_count=655360
并执行命令:
sysctl -p

访问 http://192.168.76.139:9200/

集群的安装模式也很简单,后期会升级为集群,也会介绍一些细节,暂时我们先使用单节点来进行我们的使用
  • 安装ik分词器
ik分词可以更好的支持中文分词
下载ik
create plugin folder cd your-es-root/plugins/ && mkdir ik
unzip plugin to folder your-es-root/plugins/ik

安装完成重新启动:
可以看到
[bcfWDb7] loaded plugin [analysis-ik]

  • 安装kibana
我们选用kibana作为测试工具
解压: tar -xzvf kibana-6.4.3.tar.gz
修改 kibana.yml:
    server.port: 5601
    server.host: "192.168.76.139"
    server.name: "elasticsearch"
    elasticsearch.url: "http://192.168.76.139:9200"
    
前台启动,不能关闭终端
./kibana
后台启动
nohup ./kibana &    

  • 安装head插件
head插件可以看到es集群的情况
依赖nodejs环境

git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
npm run start
后台启动:nohup npm run start &

修改配置es配置: elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"

修改head插件配置:Gruntfile.js 
connect: {
            server: {
                    options: {
                            port: 9100,
                            base: '.',
                            keepalive: true,
                            hostname: '192.168.88.130'
                    }
            }
         }

我们需要做什么?

假如我们想做一款app,每天会在里面新增一篇技术文章,并且会发布一个技术问题,
又或者影视介绍。
日积月累,里面的内容越来越多,想要快速找到想要的内容,迫使我们加入搜索引擎的功能 暂且叫它彗星

索引的设计

cometId                 唯一标示 
title                   标题 
author                  原创者
editor                  责任编辑
category                分类
description             描述
content                 内容
createTime              创建时间

这里我还想添加一个字段,但是暂时不加,后面在重新索引数据的时候会进行新增。
一般来说,数据持久化会在数据库中,比如mysql。es是不支持事务。但是es在全文搜索方面很强大,
我们可以先从es搜索,把需要的字段返回,或者只返回一个id,然后通过id去数据库查询,去获取更多我们想要的内容。

去kibana 的 dev_tools 建立索引

PUT comet
{
  "settings": {
    "number_of_replicas": 0,
    "number_of_shards": 5,
    "index.store.type": "niofs",
    "index.query.default_field": "title",
    "index.unassigned.node_left.delayed_timeout": "5m"
  },

  "mappings": {
    "comet": {
      "dynamic": "strict",
      "properties": {
        "cometId": {
          "type": "long"
        },
        "title": {
          "type": "text",
          "analyzer": "ik_smart",
          "search_analyzer": "ik_smart"
        },
        "author": {
           "type": "text",
           "analyzer": "ik_smart",
           "search_analyzer": "ik_smart"
         },
        "editor": {
          "type": "keyword"
        },
        "category": {
          "type": "keyword"
        },
        "description": {
          "type": "text",
          "analyzer": "ik_smart",
          "search_analyzer": "ik_smart"
        },
        "content": {
          "type": "text",
          "analyzer": "ik_smart",
          "search_analyzer": "ik_smart"
        },
        "createTime": {
          "type": "date",
          "format": "strict_date_optional_time||epoch_millis"
        },
        "suggest": {
          "type": "completion"
        }
      }
    }
  }
}

返回:
{
  "acknowledged": true,
  "shards_acknowledged": true,
  "index": "comet"
}
分词器采用ik
如果需要分词:text类型
如果不需要分词:keyword类型精确查询
suggest自动补全功能
  • 准备工作完成,后续继续介绍 Java 客户端的使用,重新索引数据,别名的使用等常用的操作
点击查看更多内容
3人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
6396
获赞与收藏
157

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消