from elasticsearch7 import Elasticsearch
class ElasticsearchTool():
def __init__(self,index):
# 初始化es对象
self.es = Elasticsearch(
# ['http://101.132.32.61:9200/'],
['172.17.0.7:9200/'],
sniff_on_connection_fail=True, # 节点没有响应时,进行刷新,重新连接
sniffer_timeout=60, # 每 60 秒刷新一次
)
self.index = index #索引实例化传递的索引名
self.create_index()
#创建索引
def create_index(self):
#判断索引是否已经存在
if not self.es.indices.exists(index=self.index):
self.es.indices.create(index=self.index)
#向索引中插入数据
def add_data(self,id,data):
return self.es.index(index=self.index,id=id,document=data)
#搜索数据
def search(self,body):
return self.es.search(index=self.index,body=body)
我们来测试一下封装是否有问题:
if __name__ == '__main__':
# 插入数据(进行测试)
# es_tool =ElasticsearchTool('my_book3')
# re1 = es_tool.add_data('1',{
# 'title':'三国演义',
# 'author':'罗贯中'
# })
# print(re1)
# 查询数据(进行测试)
es_tool = ElasticsearchTool('mybook')
res = es_tool.search(
{
"query": {
"bool": {
"should": [
{
"match": {
"title": '恐龙',
}
},
{
"match": {
"price": '66'
}
}
]
}
}
}
)
print(res)
//进行监听数据;
# 监听模型类
导入我们封装的类
from utils.elasticsear_settig import ElasticsearchTool
# # 在插入数据后进行监听
@event.listens_for(ArticleModel,'after_insert',raw=True)
@event.listens_for(ArticleModel,'after_update',raw=True)
def listen_book_model(mapper,connection,target):
data = {
'aid':target.object.aid,
'title':target.object.title,
'audio_file':target.object.audio_file,
'is_vip':target.object.is_vip,
'count':target.object.count,
}
es = ElasticsearchTool('myarticle')
es.add_data(target.object.aid,data)
// 在视图中实现搜索功能:class SearchView(BaseView):
def get(self,word):
from utils.elasticsear_settig import ElasticsearchTool
es = ElasticsearchTool('mybook')
rs = es.search(
# '''
# 'bid':target.object.bid,
# 'title':target.object.title,
# 'img':target.object.img,
# 'author':target.object.author,
# 'read_num':target.object.read_num,
# 'intro':target.object.intro,
# 'is_hot':target.object.is_hot,
#
#
# '''
{
"query": {
"bool": {
"should": [
{
"match": {
"title": word,
}
},
{
"match": {
"intro": word,
}
},
{
"match": {
"price": word
}
},
{
"match": {
"img": word,
}
},
{
"match": {
"author": word,
}
},
]
}
}
}
)
book_list = rs['hits']['hits']
book_all = []
for book in book_list:
book_all.append(book['_source'])
return self.success(book_all)版权声明:本文为sdsdvsdvs原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。