001.jpg
用理工科思维看待这个世界 系列爬虫专栏 崇尚的学习思维是:输入,输出平衡,且平衡点不断攀升。 希望我眼中的世界,是个温暖纯真的世界. 今天的主题是:elasticsearch的使用
序号 | 内容 | 说明 |
---|---|---|
01 | 概念 | -- |
02 | 安装及配置 | -- |
03 | 使用 | -- |
04 | 实战 | -- |
05 | 总结及说明 | -- |
Relation DB -> Databases -> tables -> rows -> columns
Elasticsearch -> Indices -> Types -> Documents -> Fields
windows 平台为例
C:\Program Files\Java\jdk1.8.0_65
%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
C:\Program Files\Java\jdk1.8.0_65\bin;C:\Program Files\Java\jre1.8.0_65
验证是否配置正确JAVA环境:命令提示符下:javac
001.png
http://localhost:9200/
002.png
.\plugin install mobz/elasticsearch-head
浏览器中输入:http://localhost:9200/_plugin/head/
003.png
目录 | 说明 |
---|---|
bin | 运行Elasticsearch 实例和插件管理所需的脚本 |
config | 配置文件所在目录 |
lib | Elasticsearch所使用的库 |
data | 存储ElasticSearch所使用的所有数据 |
logs | 实例运行期间产生的事件和错误信息的文件 |
plugins | 用于存储安装的插件 |
work | 临时文件 |
在python中的使用为例 需要安装elasticsearch 库
# 向es中插入一条数据
from datetime import datetime
from elasticsearch import Elasticsearch
es = Elasticsearch() # 创建连接
doc = {
'author': 'kimchy',
'text': 'Elasticsearch: cool. bonsai cool.',
'timestamp': datetime.now(),
} # 文档
res = es.index(index="test-index", doc_type='tweet', id=1, body=doc) # 插入数据
print(res['created'])
效果:
004.png
# 查询所有的test-index 下的数据
res = es.search(index="test-index", body={"query": {"match_all": {}}}) # 查询数据,返回的是JSON格式的数据
print("Got %d Hits:" % res['hits']['total'])
for hit in res['hits']['hits']:
print("%(timestamp)s %(author)s: %(text)s" % hit["_source"])
# output 上文插入的数据
Got 1 Hits:
2016-05-06T10:07:40.480466 kimchy: Elasticsearch: cool. bonsai cool.
管理工具上查询显示:同样是刚才那条数据
005.png
核心代码参见专栏:009
提供两种方式将抓取到的电影数据插入es中
# 第一种方式:content 是每部电影的数据:包括电影名,评分数,导演等
def save_to_es(self, content):
global id
data = json.dumps(content)
url = "http://localhost:9200/exercise/douban/" + str(id)
body = requests.post(url, data)
id += 1
#......
if __name__ == "__main__":
url = "https://movie.douban.com/top250?start=0&filter="
Start = DouBanTop()
urls = Start.urls()
for one_url in urls:
one_page_content = Start.get_content(one_url)
all_data = Start.content_json(one_page_content)
for one in all_data:
Start.save_to_es(one)
# 第二种使用elasticsearch库
def save_to_es2(self, content):
es = Elasticsearch()
global id
data = json.dumps(content)
res = es.index(index="exercise", doc_type="douban", id = id, body = data)
id +=1
#............
if __name__ == "__main__":
url = "https://movie.douban.com/top250?start=0&filter="
Start = DouBanTop()
urls = Start.urls()
for one_url in urls:
one_page_content = Start.get_content(one_url)
all_data = Start.content_json(one_page_content)
for one in all_data:
Start.save_to_es2(one)
效果显示:
006.png
查询效果显示:
007.png
完整版代码代码
参考文献:
Github:github
搭建了一个博客:博客
IT初学者.