es的搜索引擎主要分一下步骤
1.docker的简单了解
2.docker安装
3.Elasticsearch的简单了解
4.Elasticsearch的安装
5.Elasticsearch和python交互配置
6.Elasticsearch在python的使用
1. Docker的思想源于集装箱,集装箱解决了什么问题呢?
2. 在早期运输货物需要不同分类的船,例如运输水果的船,运输生活用品的船
3. 有了集装箱后,在大船上,可以把货物分类到不同的集装箱中,水果一个集装箱,生活用品一个集装箱
4. 它们之间互不影响,只要把货物封装好集装箱里,就可以把不同类的货物一起运走。
5. 通过Docker logo也可以看出所以然来,Docker就像大船,集装箱就是容器。
6. 一条鲸鱼拖着若干个集装箱的经典形象已经深入人心。
1. Docker是使用最广泛的开源容器引擎
2. 一种操作系统基本的虚拟化技术
3. 一种简单的应用程序打包工具
4. 依赖Linux内核特性:Namespace(资源隔离) 和 Cgroup(资源限制)
5.容器
容器是一个操作系统级别下的虚拟化技术,运行一个容器就行运行一个进程一样
容器依赖linux内核特性:Namespace(资源隔离)和Cgroups(资源限制)
6.具体了解docker去下面网址:01: docker 基本使用 - 不做大哥好多年 - 博客园
(支持原作者的作品,有需要的自己去了解)
a.更新源:sudo apt-get update
b.安装docker: sudo apt-get install docker.io
c.查看docker:sudo docker ps
可以不用加sudo,这就是要根据自身情况来说的
如果出现以下报错,小编给的解决方案
E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?
解决方案:出现在这个错误 表明了你开启了两个虚拟机 就重启就好了
Command 'curl' not found, but can be installed with:
sudo snap install curl # version 7.82.0, or
sudo apt install curl
See 'snap info curl' for additional versions.
解决方案:sudo apt-get install curl
1.作为数据库(代替MySQL);
2.在大数据条件下做检索服务、同义词处理、相关度排名、复杂数据分析、海量数据的近实时处理;
3.记录和日志的分析
4.全文检索
5.关系型数据库的补充,传统数据库的替代
6.站内搜索、垂直搜索
8.如果具体了解Elasticsearch相关用法去下面的网址:http://t.csdn.cn/7Fm6I
(支持原作者的作品,有需要的自己去了解)
1、拉取es镜像
docker pull bitnami/elasticsearch
2、创建es容器
docker run -d -p 9200:9200 -p 9300:9300 --name elasticsearch bitnami/elasticsearch
如果出现以下报错,小编给的解决方案
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/json: dial unix /var/run/docker.sock: connect: permission denied
解决方案:在命令前面加上sudo
在安装1.拉取镜像的时候可能需要的时间会长 在安装2.成功会出现一堆乱码
1.具体的解释每个代码块
2.整张页面的es相关的代码
3.将数据库数据导入es
1.具体的解释每个代码块
初始化连接一个 Elasticsearch 操作对象
def __init__(self, index_name: str):
self.es = es
self.index_name = index_name
根据 ID 获取文档数据
def get_doc(self, uid):
return self.es.get(index=self.index_name, id=uid)
插入文档数据
def insert_one(self, doc: dict):
self.es.index(index=self.index_name, body=doc)
def insert_array(self, docs: list):
for doc in docs:
self.es.index(index=self.index_name, body=doc)
搜索文档数据
# 搜索文档数据 query 字段 count 30 秒
# 三元运算符 :条件成立执行语句,if条件 ,else 条件不成立执行语句
def search(self, query, count: int = 30, fields=None):
fields = fields if fields else ["title", 'pub_date']
dsl = {
"query": {
"multi_match": {
"query": query,
"fields": fields
},
# 'wildcard': {
# 'content': {
# 'value': '*' + query + '*'
# }
# }
},
"highlight": {
"fields": {
"title": {}
}
}
}
match_data = self.es.search(index=self.index_name, body=dsl, size=count)
return match_data
def _search(self, query: dict, count: int = 20, fields=None): # count: 返回的数据大小
results = []
match_data = self.search(query, count, fields)
for hit in match_data['hits']['hits']:
results.append(hit['_source'])
return results
添加文档数据
def create_index(self):
if self.es.indices.exists(index=self.index_name) is True:
self.es.indices.delete(index=self.index_name)
self.es.indices.create(index=self.index_name, ignore=400)
删除文档数据
def delete_index(self):
try:
self.es.indices.delete(index=self.index_name)
except:
pass
2.整张页面的es相关的代码
创建es实例
"""
es 引擎相关
"""
from elasticsearch import Elasticsearch
# 创建es 实例
es = Elasticsearch("http://101.42.224.35:9200/")
class ES(object):
"""
es 对象
"""
# 初始化连接一个 Elasticsearch 操作对象
def __init__(self, index_name: str):
self.es = es
self.index_name = index_name
# 根据 ID 获取文档数据
def get_doc(self, uid):
return self.es.get(index=self.index_name, id=uid)
# 插入文档数据
def insert_one(self, doc: dict):
self.es.index(index=self.index_name, body=doc)
def insert_array(self, docs: list):
for doc in docs:
self.es.index(index=self.index_name, body=doc)
# 搜索文档数据 query 字段 count 30 秒
# 三元运算符 :条件成立执行语句,if条件 ,else 条件不成立执行语句
def search(self, query, count: int = 30, fields=None):
fields = fields if fields else ["title", 'pub_date']
dsl = {
"query": {
"multi_match": {
"query": query,
"fields": fields
},
# 'wildcard': {
# 'content': {
# 'value': '*' + query + '*'
# }
# }
},
"highlight": {
"fields": {
"title": {}
}
}
}
match_data = self.es.search(index=self.index_name, body=dsl, size=count)
return match_data
def _search(self, query: dict, count: int = 20, fields=None): # count: 返回的数据大小
results = []
match_data = self.search(query, count, fields)
for hit in match_data['hits']['hits']:
results.append(hit['_source'])
return results
# 添加文档数据
def create_index(self):
if self.es.indices.exists(index=self.index_name) is True:
self.es.indices.delete(index=self.index_name)
self.es.indices.create(index=self.index_name, ignore=400)
# 删除文档数据
def delete_index(self):
try:
self.es.indices.delete(index=self.index_name)
except:
pass
3.将数据库数据导入es
import pymysql
import traceback
from elasticsearch import Elasticsearch
def get_db_data():
# 打开数据库连接(ip/数据库用户名/登录密码/数据库名)
db = pymysql.connect(host="数据库端口", user="root", password="数据库密码",
database="库名", charset='utf8')
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# sql 查询语句
sql = "SELECT * FROM course"
# 使用 execute() 方法执行 SQL 查询
cursor.execute(sql)
# 获取所有记录列表
results = cursor.fetchall()
# 关闭数据库连接
db.close()
return results
def insert_data_to_es():
es = Elasticsearch("http://101.42.224.35:9200/")
# 清空数据
es.indices.delete(index='course')
try:
i = -1
for row in get_db_data():
print(row)
print(row[1], row[2])
i += 1
# index就是对应的一张表 eg.对应的就是course表
es.index(index='course', body={
'id': i,
'table_name': 'table_name',
'pid': row[4],
'title': row[5],
'desc': str(row[6]),
})
except:
error = traceback.format_exc()
print("Error: unable to fecth data", error)
if __name__ == "__main__":
__searchable__ = ['title'] #搜索相关的字段 __analyzer__ = ChineseAnalyzer()#支持中文索引
class Tag(Base):
"""
课程标签
"""
__tablename__ = 'tag'
__searchable__ = ['title']
__analyzer__ = ChineseAnalyzer()
id = db.Column(db.Integer, primary_key=True, doc='课程标签id')
title = db.Column(db.String(16), doc='课程类别')
sequence = db.Column(db.Integer, doc='展示顺序', default=10)
course = db.relationship('Course', secondary='course_tag', backref=db.backref('tags'))
def __str__(self):
return self.title
在python中使用的方法----es.searche()
es = ES(index_name='Tag')
result = es._search(q, fields=['title', 'desc'])
import traceback
from common.es.es import ES
class GetTag(Resource):
def get(self):
"""
获取前端数据
使用es全文搜索
"""
parser = reqparse.RequestParser()
parser.add_argument('q')
args = parser.parse_args()
q= args.get('q')
try:
es = ES(index_name='Tag')
result = es._search(q, fields=['title', 'desc'])
return marshal(result, tag_fields)
except:
error = traceback.format_exc()
print('111111111111', error)
return {'message': error}, 500
以上所有是小编遇见的,如果进行相关的了解docker,es 文章里面都有原创的网址
谢谢小伙伴们观看