一、elasticsearch的介绍及功能

elasticsearch是一个由java编写一个分部式搜索引擎,使用elasticsearch可以实现以下 功能。

  • 快速的全文检索,100万数据检索不到1秒
  • 提供分布式和集群
  • 本身提供完善的restful接口

python应用:

  • 在django或者flask使用当中,用elasticsearch代替数据库存储一部分内容。
  • 在爬虫当中,使用elasticsearch进行大数据的存储。

二、elasticsearch服务器的安装搭建(Centos)

1、安装java最新的jdk(1.8版本以上)

Centos系统自带java版本为1.8.0

python es连接 用户名和密码_elasticsearch安装使用

2、下载elasticsearch并移动至home目录下解压

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.1.tar.gz

移动到home目录下进行解压

python es连接 用户名和密码_服务器_02

3、创建启动elasticsearch专用的用户(es默认不允许以root身份启动)

python es连接 用户名和密码_elasticsearch_03

4、创建存放elasticsearch数据和日志的目录并赋予其所有者为esuser用户

python es连接 用户名和密码_java_04

5、修改节点配置
cd到elasticsearch目录下的config目录下,找到elasticsearch.yml节点配置文件。
进行备份,然后开始配置

cd elasticsearch-6.3.1/config/
cp elasticsearch.yml elasticsearch.yml.bak
vim elasticsearch.yml

python es连接 用户名和密码_elasticsearch安装使用_05


①打开注释,配置集群名称

cluster.name: my-application

python es连接 用户名和密码_elasticsearch安装使用_06


②打开注释,配置节点属性

node.attr.rack: r1

python es连接 用户名和密码_服务器_07


③打开注释,配置数据及日志存储路径

path.data: /home/esdata/data
path.logs: /home/esdata/log

python es连接 用户名和密码_elasticsearch安装使用_08

④打开注释,配置内存

bootstrap.memory_lock: true

python es连接 用户名和密码_java_09

⑤打开注释,配置网络参数

network.host: 10.10.21.130
http.port: 9200

python es连接 用户名和密码_python es连接 用户名和密码_10


⑥打开注释,配置静态主机列表

discovery.zen.ping.unicast.hosts: ["host1", "host2"]

python es连接 用户名和密码_java_11


⑦打开注释,配置索引分片节点

gateway.recover_after_nodes: 3

python es连接 用户名和密码_java_12


⑧打开注释,配置是否可以通过正则或者_all删除或者关闭索引

action.destructive_requires_name: true

python es连接 用户名和密码_服务器_13

7、编辑/etc/security/limits.conf文件,给特定用户设置持续限制

python es连接 用户名和密码_python es连接 用户名和密码_14


在文件结尾增加如下配置:

esuser hard nofile 65536
esuser soft nofile 65536
esuser soft memlock unlimited
esuser hard memlock unlimited

python es连接 用户名和密码_elasticsearch_15

8、编辑/etc/sysctl.conf文件,设置虚拟内存最大映射数量,否则es内存报错

python es连接 用户名和密码_elasticsearch安装使用_16


在文件结尾添加:

vm.max_map_count=266144

max_map_count参数解释:

max_map_count文件包含限制一个进程可以拥有的VMA(虚拟内存区域)的数量。虚拟内存区域是一个连续的虚拟地址空间区域。在进程的生命周期中,每当程序尝试在内存中映射文件,链接到共享内存段,或者分配堆空间的时候,这些区域将被创建。调优这个值将限制进程可拥有VMA的数量。限制一个进程拥有VMA的总数可能导致应用程序出错,因为当进程达到了VMA上线但又只能释放少量的内存给其他的内核进程使用时,操作系统会抛出内存不足的错误。如果你的操作系统在NORMAL区域仅占用少量的内存,那么调低这个值可以帮助释放内存给内核用。

python es连接 用户名和密码_elasticsearch安装使用_17


重新载入配置:

sysctl -p

python es连接 用户名和密码_elasticsearch安装使用_18

8、启动elasticsearch服务器

切换到esuser用户下

python es连接 用户名和密码_elasticsearch安装使用_19


进入到elasticsearch-6.3.1/bin/目录下,启动elasticsearch脚本,启动服务

python es连接 用户名和密码_elasticsearch_20

./elasticsearch

python es连接 用户名和密码_java_21

python es连接 用户名和密码_python es连接 用户名和密码_22

9、访问elasticsearch服务器进行测试效果

python es连接 用户名和密码_python es连接 用户名和密码_23

三、python elasticsearch操作

Python 基于es的操作都是接口类型的操作,但是后来es发现Python接口操作总是离不开一段类似于爬虫的代码。Es就进行了Python接口的封装。

es的基本存储单位是索引(index),类似mysql当中的表

1、安装elasticsearch模块

pip install elasticsearch

python es连接 用户名和密码_elasticsearch安装使用_24

2、编写elasticsearch脚本测试

from elasticsearch import Elasticsearch

# 连接es服务器
es = Elasticsearch(["10.10.21.130"],timeout=360)


# 插入索引
data = {
    "mappings":{
        "properties":{
            "title":{
                "type":"text",
                "index":True
            },
            "keywords":{
                "type":"text",
                "index":True
            },
            "link":{
                "type":"string",
                "index":True
            },
            "content":{
                "type":"text",
                "index":True
            },
        }
    }
}

es.indices.create(index="python-index",body=data)

# 查看索引
# es.search()