当前位置: 首页 > news >正文

Elasticsearch 中文搜索搭建

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

ElasticSearch的可视化应用 ElasticHD

https://hub.docker.com/r/containerize/elastichd/

Elasticsearch 简称es,本文以elasticsearch2.3.1为例进行安装。 
根据自己的需求,替换 username 和 serverhost 的值。

预备阶段

本地电脑终端 登录服务器并切换至用户目录下:

$ ssh -o ServerAliveInterval=60 username@serverhost

记得输入username对应的password

$ cd ~

创建目录:

$ mkdir ~/app               # es相关的bin目录
$ mkdir ~/data/es/logs/ -p  # es的log目录
$ mkdir ~/data/es/data/ -p  # es的data目录
$ mkdir ~/local             # es相关java安装目录
$ mkdir ~/pkgs              # es相关安装源文件
$ mkdir ~/workspace         # es相关用户工作空间

安装最新版的java

java 
本文以 Linux x64 172.91 MB jdk-8u73-linux-x64.tar.gz

$ cd ~/pkgs
$ wget http://download.oracle.com/otn-pub/java/jdk/8u73-b02/jdk-8u73-linux-x64.tar.gz
$ cp jdk-8u73-linux-x64.tar.gz ~/local
$ cd ~/local 
$ tar -zxvf jdk-8u73-linux-x64.tar.gz
$ rm jdk-8u73-linux-x64.tar.gz 

如果你在服务器上面无法下载,可以在 本地电脑终端 上面下载后,再通过scp命令复制到服务器上面的~/pkgs目录下面。假设当前路径包含已下载 jdk-8u73-linux-x64.tar.gz,执行以下命令:

$ scp jdk-8u73-linux-x64.tar.gz username@serverhost:~/pkgs

执行scp命令后,记得username对应输入password!

紧接着,在服务器上面配置Java的环境变量。

$ cd ~/local 
$ cd jdk1.8.0_77 
$ pwd
/home/elasticsearch/local/jdk1.8.0_77 
$ vim ~/.bash_profile 

在 .bash_profile 中添加:

JAVA_HOME=$HOME/local/jdk1.8.0_77
export JAVA_HOME
CLASSPATH=.:$JAVA_HOME/lib
export CLASSPATH

退出并保持修改,使修改立即生效。

$ source ~/.bash_profile
$ java -version
java version "1.8.0_77"
Java(TM) SE Runtime Environment (build 1.8.0_77-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)

安装Elasticsearch最新版

elasticsearch下载

下载最新包并解压到~/app

修改elasticsearch配置

$ cd ~/app/elasticsearch-2.3.1/config
$ vim elasticsearch.yml

在elasticsearch.yml中修改:

path.data: /home/elasticsearch/data/es/data
path.logs: /home/elasticsearch/data/es/logs
cluster.name: yourawesomename
bootstrap.mlockall: true
discovery.zen.minimum_master_nodes: 1
http.port: 9200
network.host: 0.0.0.0
discovery.zen.ping.unicast.hosts: ["yourserverhost"]

根据自己的需求,替换 cluster.name 和 discovery.zen.ping.unicast.hosts值,保存并退出。

安装插件

安装中文分词插件

官网

a. 下载

b. 本地 解压并打包

$ tar -zxvf elasticsearch-analysis-ik-1.9.1.tar.gz
$ cd elasticsearch-analysis-ik-1.9.1
$ mvn package  

c. 服务器上创建 ik 文件夹

$ mkdir ~/app/elasticsearch-2.3.1/plugins/ik -p

d. 上传 本地 打包文件到服务器 ik 文件夹并解压

$ scp target/releases/elasticsearch-analysis-ik-1.9.1.zip username@serverhost:~/app/elasticsearch-2.3.1/plugins/ik

记得输入username对应的password

$ unzip elasticsearch-analysis-ik-1.9.0.zip
$ rm elasticsearch-analysis-ik-1.9.0.zip

服务器上安装数据库importer

$ cd ~/app/
$ wget http://xbib.org/repository/org/xbib/elasticsearch/importer/elasticsearch-jdbc/2.3.1.0/elasticsearch-jdbc-2.3.1.0-dist.zip
$ unzip elasticsearch-jdbc-2.3.1.0-dist.zip
$ rm  elasticsearch-jdbc-2.3.1.0-dist.zip

服务器上安装数据库head

官网

$ cd ~/app
$ elasticsearch-2.3.1/bin/plugin install mobz/elasticsearch-head

启动es

$ cd ~/app/elasticsearch-2.3.1
$ ./bin/elasticsearch -d

Reindexing your data with zero downtime

根据自己的需求,替换index_v1, solution.

创建索引 
curl -XPUT localhost:9200/index_v1?pretty -d @index_v1.json

index_v1.json中的内容如下所示:

{
"mappings":
    {
    "solution": {
            "_all": {
                "analyzer": "ik_smart",
                "search_analyzer": "ik_smart",
                "term_vector": "no",
                "store": "false"
            },
            "properties": {
                "btype": {
                     "type": "string",
                     "index": "not_analyzed"
                },
                "title": {
                    "type": "string",
                    "store": "yes",
                    "term_vector": "with_positions_offsets",
                    "analyzer": "ik_smart",
                    "search_analyzer": "ik_smart",
                    "include_in_all": "true",
                    "boost": 8
                },
                "update_time": {
                    "type": "date",
                    "store": "yes",
                    "format": "dateOptionalTime"
                 }
            }
        }
    }
}

定义索引别名

curl -XPOST localhost:9200/_aliases -d '
{
    "actions": [
        { "add": {
            "alias": "myindex",
            "index": "index_v1"
        }}
    ]
}'

服务器上导入数据库数据

$ cd ~/app/elasticsearch-jdbc-2.3.1.0/bin
$ touch index_v1.sh
$ vim index_v1.sh

根据实际情况修改MySQL的host:port/database, user, password, sql.

    #!/bin/sh
    DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
    bin=${DIR}/../bin
    lib=${DIR}/../lib
    echo '
    {
        "type" : "jdbc",
        "jdbc" : {
            "elasticsearch" : {
                 "cluster" : "yourawesomename",
                 "host" : "localhost",
                 "port" : 9300
            },
            "url" : "jdbc:mysql://host:port/database",
            "user" : "tester",
            "password" : "12345678",
            "sql" : "select id as _id,type as btype,title,update_time from dbtable",
            "index" : "index_v1",
            "type" : "solution",
            "index_settings" : {
                "index" : {
                    "number_of_shards" : 1
                }
            }
        }
    }
    ' | java \
        -cp "${lib}/*" \
        -Dlog4j.configurationFile=${bin}/log4j2.xml \
        org.xbib.tools.Runner \
        org.xbib.tools.JDBCImporter

保存并退出, index_v1.sh; 执行导入数据库脚本index_v1.sh 
$ sh index_v1.sh

数据导入耗时依据导入的数据量,导入完成后不会输入任何信息。

需求更改

curl -XPUT localhost:9200/index_v2 -d @index_v2.json

移除index_v1

curl -XPOST localhost:9200/_aliases -d '
{
    "actions": [
        { "remove": {
            "alias": "myindex",
            "index": "index_v1"
        }},
        { "add": {
            "alias": "myindex",
            "index": "index_v2"
        }}
    ]
}'

删除 index_v1

curl -XDELETE localhost:9200/index_v1

踩坑小分队

  • 批量更新『打开文件过多』

管理员权限,更改open files 为65536。

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 127455
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65536
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1024
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
  • 批量更新 『无法分配内存』

管理员权限,更改/etc/security/limits.conf, for example:

# allow user 'elasticsearch' mlockall
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
  • 批量更新 『JVM out of memory』

.bash_profile添加

export ES_HEAP_SIZE=1g  # 更具实际情况设置 free -m查看使用情况  
source .bash_profile    # 立即生效。
  • 批量更新 『 Error: Request error, retrying 』

设置请求批量请求的 [文档大小]( 
https://www.elastic.co/guide/en/elasticsearch/guide/master/indexing-performance.html#_using_and_sizing_bulk_requests)

转载于:https://my.oschina.net/mickelfeng/blog/913204

相关文章:

  • 潜伏 11 年之久,Linux 惊现高危内核漏洞 Phoenix Talon
  • 权当开篇——Linux学习之路(一)
  • ReSharper Ultimate 2017 下载地址及破解方法
  • 洪水
  • 记一次ubuntu下通过grub引导win7 双系统
  • WebApi 接口参数不再困惑:传参详解
  • Sublime编译器快捷键大全
  • Scala 闭包
  • ElasticSearch5.x实践_day01_04_ElasticSearch增删改查
  • PHP 开源框架 MiniFramework 发布 0.10.0 版
  • kdev-ruby 停止开发,原 maintainer 转用其它编辑器
  • 人们对互联网的误解到底有多深?
  • Atlassian发布Bamboo 6.0和Bitbucket Server 5.0
  • 3.文件拷贝
  • 窗口对象被缩放的操作监听
  • [译] 怎样写一个基础的编译器
  • JavaScript 一些 DOM 的知识点
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • MySQL的数据类型
  • php的插入排序,通过双层for循环
  • ucore操作系统实验笔记 - 重新理解中断
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 搞机器学习要哪些技能
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 机器学习中为什么要做归一化normalization
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 如何在GitHub上创建个人博客
  • 深入浅出Node.js
  • 深入浅出webpack学习(1)--核心概念
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 微服务入门【系列视频课程】
  • 移动端唤起键盘时取消position:fixed定位
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (6)设计一个TimeMap
  • (vue)页面文件上传获取:action地址
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (转)关于多人操作数据的处理策略
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .apk 成为历史!
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .NET Core 中插件式开发实现
  • .NET Framework .NET Core与 .NET 的区别
  • .Net6 Api Swagger配置
  • .NetCore部署微服务(二)
  • .NET分布式缓存Memcached从入门到实战
  • .Net接口调试与案例
  • 。Net下Windows服务程序开发疑惑
  • @Transactional 竟也能解决分布式事务?
  • [ Linux 长征路第五篇 ] make/Makefile Linux项目自动化创建工具