Elasticsearch 中文分词 & 安全配置

Oct 3, 2016


一. 资源准备

    centos7.0  

        注意是7.0的系统  

    elasticsearch-2.2.0.tar.gz  

        资源地址 : https://www.elastic.co/downloads/past-releases/elasticsearch-2-2-0  
        注意是 2.2.0 的版本  

    elasticsearch-analysis-ik-1.8.0.zip  

        资源地址 : https://github.com/medcl/elasticsearch-analysis-ik/releases  
        注意是 1.8.0 的版本  
    
    
    
    tar -zxvf elasticsearch-2.2.0.tar.gz  
    
        解压 elasticsearch  
    
    mv elasticsearch-2.2.0 elasticsearch  
    
        改名 elasticsearch 的安装目录(强迫症...)  
    
    mv elasticsearch-2.2.0.tar.gz elasticsearch/  
    
        把压缩包移至elasticsearch的安装目录(强迫症...)  
    
    
    
    tar -zxvf elasticsearch-analysis-ik-1.8.0.zip  
    
        解压 elasticsearch-ik  
    
    mv elasticsearch-analysis-ik-1.8.0 elastic-ik  
    
        改名 elasticsearch-ik 的安装目录(强迫症...)  
    
    mv elasticsearch-analysis-ik-1.8.0.zip elastic-ik/  
    
        把压缩包移至elastic-ik的安装目录(强迫症...)  

二. 安装 ik分词器

    yum install maven  
    
        安装 maven  
    
    cd path/elastic-ik  
    
        进入你的elastic-ik的安装目录  
    
    mvn clean  
    
    mvn compile  
    
    mvn package  
    
    mkdir /home/seven/elasticsearch/plugins/ik  
    
        创建ik分词插件的目录  
    
    cp target/releases/elasticsearch-analysis-ik-1.8.0.zip /home/seven/elasticsearch/plugins/ik/  
    
        把target/releases下的压缩文件拷贝到elasticsearch的ik插件目录下  
    
    cd /home/seven/elasticsearch/plugins/ik  
    
        进入elasticsearch的ik插件目录  
    
    unzip elasticsearch-analysis-ik-1.8.0.zip  
    
        解压这个ik压缩文件  

三. 配置文件 elasticsearch.yml

    # 此配置文件位于elasticsearch安装目录下的config目录中  
    # 我只把我显示指定的配置项列了出来 :  
    
    cluster.name: waringstates  
    
        集群的名称  
        若是同一个网段下几个机子要构成集群,该配置项必须相同  
    
    node.name: node-1  
    
        该结点的名称  
        若是同一个网段下几个机子要构成集群,该配置项必须不同  
    
    path.data: /mydata/elasticsearch/data  
    
        数据存储路径  
    
    path.logs: /mydata/elasticsearch/logs  
    
        日志存储路径  
    
    network.host: ******  
    
        绑定的ip地址  
        该值可以填 : 127.0.0.1 or 内网地址 or 公网地址  
    
    http.port: 9200  
    
        绑定的端口  
    
    path.repo: ["/mydata/elasticsearch/backup"]  
    
        数据备份的路径  

四. 检验 elasticsearch

    // 我把自己一个APP里面搜索文章的示例作为示范
    // 它根据用户输入的一句话,来搜索最匹配的若干篇文章( 根据文章的标题,标签,正文等,给予不同的匹配权重 )

    a. 创建一个测试用的索引  
    
        curl -XPUT 127.0.0.1:9200/deepnote
    
    b. 创建一个mapping  
    
        curl -XPOST 127.0.0.1:9200/deepnote/notes/_mapping -d'{
            "mappings" : {
                "notes" : {
                    "properties" : {
                        "title" : { "type" : "string", "analyzer" : "ik_smart" },
                        "tags"  : { "type" : "string", "analyzer" : "ik_smart" },
                        "refer" : { "type" : "string", "analyzer" : "ik_max_word" },
                        "feel"  : { "type" : "string", "analyzer" : "ik_max_word" }
                    }
                }
            }
        }'
    
    c. 查询测试  
    
        curl -XPOST 127.0.0.1:9200/deepnote/notes/_search -d '{
            "size" : 10,
            "sort" : [ { "_score" : { "order" : "desc" } } ],
            "query" : {
                "filtered" : {
                    "query" : {
                        "bool" : {
                            "should" : [
                                { "match" : { "title" : { "query" : 此处填一句话, "boost" : 此处填整数权重 } } },
                                { "match" : { "tags"  : { "query" : 此处填一句话, "boost" : 此处填整数权重 } } },
                                { "match" : { "refer" : { "query" : 此处填一句话, "boost" : 此处填整数权重 } } },
                                { "match" : { "feel"  : { "query" : 此处填一句话, "boost" : 此处填整数权重 } } }
                            ]
                        }
                    }
                }
            }
        }'

五. 限制 IP

    # 因为elasticsearch目前还没有用户权限的概念,因此必须做好安全防护  
    # 当你需要在公网上访问elasticsearch的时候,建议要限制可以访问的IP  
    # 通常,我们使用 iptables 来限制ip  
    
    systemctl stop firewalld  
    systemctl mask firewalld  
    
        centos7 默认使用的是firewall,因此需要先关闭它  
    
    yum install iptables-services  
    
        安装iptables service  
    
    systemctl enable iptables  
    
        开机启动iptables-service  
    
    systemctl start iptables  
    
        启动iptables  
    
    
    iptables -I INPUT -p tcp --dport 22 -j ACCEPT  
    
        开启ssh的22端口  
        !! 注意,别忘了把你之前的一些对外的端口信息配置一下,否则会导致无法连接  
        !! 注意,尤其注意先把ssh配好,否则呵呵哒...  
    
    iptables -I INPUT -s want_ip -p tcp --dport 9200 -j ACCEPT  
    
        开启9200端口(elasticsearch),且只对want_ip这个ip开放  
    
    service iptables save  
    
        保存iptables的配置  
    
    service iptables restart  
    
        重启iptables  
    
    
    curl -XGET 公网ip:9200/?pretty  
    
        测试访问elasticsearch  
        当你在 want_ip 这个机子上执行这条命令,是有返回值的  
        当你在 其他机子上执行这条命令,是连不上的