Elasticsearch是一个开源的搜索引擎框架。
Elasticsearch安装和启动
安装前提:Elasticsearch需要Java7或以上的版本。
下载压缩包并解压:
1
2
3wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.1.zip
unzip elasticsearch-6.6.1.zip
cd elasticsearch-6.6.1进入解压后的文件目录,启动elasticsearch:
1
./bin/elasticsearch
如果一切正常,elasticsearch默认在本机9200端口运行。打开另一个命令行窗口,执行以下命令,检查elasticsearch是否运行成功:
1
curl localhost:9200
如果输出以下信息,则运行正常。
默认情况下,elasticsearch只允许本机访问。要想其他电脑可以访问,也就是实现远程访问,需要修改文件
/config/elasticsearch.yml
,取消字段network.host
的注释,把该字段的值改为0.0.0.0
。这样的话所有的电脑都能访问,实际情况中,最好不要这样。如果启动遇到错误“Native controller process has stopped - no new native processes can be started”或“max virtual memory areas vm.maxmapcount [65530] is too low”。解决方法是执行以下命令:
1
sudo sysctl -w vm.max_map_count=262144
在python中使用elasticsearch
要先安装elasticsearch包。在python中使用elasticsearch要先启动elasticsearch。
1 | pip install elasticsearch |
创建index
1 | from elasticsearch import Elasticsearch |
如果创建成功,会返回以下信息
1 | {'acknowledged': True, 'shards_acknowledged': True, 'index': 'test_es'} |
如果再次创建,就会返回以下信息:
1 | {'error': {'root_cause': [{'type': 'resource_already_exists_exception', 'reason': 'index [news/TrkzNdXZRi6ReiZqOM2Dvg] already exists', 'index_uuid': 'TrkzNdXZRi6ReiZqOM2Dvg', 'index': 'news'}], 'type': 'resource_already_exists_exception', 'reason': 'index [news/TrkzNdXZRi6ReiZqOM2Dvg] already exists', 'index_uuid': 'TrkzNdXZRi6ReiZqOM2Dvg', 'index': 'news'}, 'status': 400} |
表示创建失败,失败的原因是要创建的index已经存在了。status状态码是400。
插入数据
1 | datas = [ |
index()方法可以完成两个操作,如果数据不存在,那就插入数据;如果数据已经存在,那就更新数据。
get()按ID查询
1 | result= es.get(index='book',doc_type='computer',id =1) |
search()实现全文检索
对于中文,我们要安装一个中文分词插件elasticsearch-analysis-ik。可以使用elastic的另一个命令行工具elastisearch-plugin来安装,要确保版本号一致。进入elastic的目录下,执行:
1 | ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.3.0/elasticsearch-analysis-ik-6.3.0.zip |
注意将6.3.0
替换为自己的版本号。安装成功后,重启elasticsearch,就会自动加载这个中文分词插件。
1 | es = Elasticsearch() |
指定使用中文分词器,如果不指定默认使用英文分词器。
1 | dsl = { |