文档章节

Elasticsearch 中文搜索搭建

mickelfeng
 mickelfeng
发布于 2017/06/02 14:26
字数 1133
阅读 23
收藏 0

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)

本文转载自:http://blog.csdn.net/tianzhaixing2013/article/details/51134237

共有 人打赏支持
mickelfeng

mickelfeng

粉丝 231
博文 2688
码字总数 572169
作品 0
成都
高级程序员
私信 提问
使用logstash+elasticsearch+kibana快速搭建日志平台

日志的分析和监控在系统开发中占非常重要的地位,系统越复杂,日志的分析和监控就越重要,常见的需求有: 根据关键字查询日志详情 监控系统的运行状况 统计分析,比如接口的调用次数、执行时间...

eddy_linux
2015/11/13
0
0
Elastic 南京 Meetup

1. 主办方 Elastic中文社区 趋势科技 2. 时间地点 活动时间:2018年6月30日 13:00 - 18:00 活动地点:雨花区软件大道48号苏豪国际广场B座 趋势科技中国研发中心(靠花神庙地铁站) 3. 报名地...

Medcl
06/04
69
0
I-team 博客全文检索 Elasticsearch 实战

一直觉得博客缺点东西,最近还是发现了,当博客慢慢多起来的时候想要找一篇之前写的博客很是麻烦,于是作为后端开发的楼主觉得自己动手丰衣足食,也就有了这次博客全文检索功能Elasticsearch...

haifeiWu
07/23
0
0
Elastic 南京Meetup 2018

时间地点 活动时间:2018年6月30日 13:00 - 18:00 活动地点:雨花区软件大道48号苏豪国际广场B座 趋势科技中国研发中心(靠花神庙地铁站) 报名地址: http://elasticsearch.mikecrm.... 名额...

Medcl
06/14
47
0
Elasticsearch学习笔记4: 分词和中文分词

分析器: 分析器作用是将指定字符串处理成多个单个的词条,创建倒排索引。当索引数据时,分析器会将对应的数据处理分词后,创建倒排索引,当搜索时,将待搜索的字符串处理成词条,再去倒排索...

子夜闻雪
2017/11/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

etcd集群备份和数据恢复

etcd是一个分布式k-v数据库,在kubernetes中使用其管理集群的元数据。这里介绍etcd集群数据的备份和数据恢复的方法和步骤。 本文来自于:https://www.maideliang.com/index.php/archives/25/...

openthings
5分钟前
0
0
「阿里面试系列」面试加分项,从JVM层面了解线程的启动和停止

文章简介 这一篇主要围绕线程状态控制相关的操作分析线程的原理,比如线程的中断,线程的通信等,内容比较多,可能会分两篇文章 阿里面试系列导读:关注我的技术公众号【架构师修炼宝典】一周...

Java架构资源分享
12分钟前
1
0
centos安装confluence全攻略

https://blog.csdn.net/qwer026/article/details/51439076

happyeveryday32
25分钟前
3
0
30 行 Javascript 代码搞定智能家居系统

本文首发于『阿里云 IoT 开发者社区』,更多精彩物联网内容欢迎前往浏览。 智能家居可谓是今年物联网的热门领域,通过智能单品和智能音箱,人们已然把『智能』两个字变成了生活的理所应当。搭...

阿里云官方博客
28分钟前
4
0
sed插入和附加文本基础使用

对于编辑器来说,在数据中增加行算是很基本的操作吧,sed有以下两个操作: 插入(insert)命令(i)会在指定行前增加一个新行 附加(append)命令(a)会在指定行后增加一个新行 还是用下面的文本来测...

woshixin
36分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部