django 搜索引擎 Elasticsearch 安装使用
2024-09-07 20:04:35
1.使用docker安装elasticsearch
a.获取镜像
# 拉取镜像到本地仓库
# docker image pull delron/elasticsearch-ik:2.4.6-1.0
由于pull拉取会比较慢, 可以将百度网盘中的elasticsearch-ik-2.4.6_docker.tar文件传到虚拟机中
然后导入镜像:
docker load -i elasticsearch-ik-2.4.6_docker.tar # 查看本地仓库是否有这个镜像
docker images
或docker image ls
b.将百度云盘中的elasticsearch.zip文件传到虚拟机中的家目录,然后unzip解压。在虚拟机中的elasticsearch/config/elasticsearch.yml第54行,更改ip地址为0.0.0.0,端口改为8002,默认端口为9200.
# 在xshell中使用rz命令将elasticsearch.zip文件传到虚拟机的家目录中
#然后在家目录中解压
unzip elasticsearch.zip
cd ~/elasticsearch/config # network.host: 172.18.168.123
network.host: 0.0.0.0
#
# Set a custom port for HTTP:
#
http.port: 8002
c.创建docker容器并运行
# 根据拉取到本地的镜像创建容器,需要将/home/bd/elasticsearch/config配置文件所在目录修改为你自己的路径
docker run -dti --network=host --name=elasticsearch -v /home/pyvip/elasticsearch/config:/usr/share/elasticsearch/config delron/elasticsearch-ik:2.4.6-1.0 # 查看是否创建成功
docker container ls -a
# 如果STATUS为Up则创建容器成功
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b254fe1ee0eb delron/elasticsearch-ik:2.4.6-1.0 "/docker-entrypoint.…" 3 days ago Up 3 days elasticsearch # 运行如下命令,如果有显示则elasticsearch配置成功
curl 127.0.0.1:8002
d.进入项目虚拟环境中,安装相关包
# 进入项目虚拟环境
workon myblog_env pip install django-haystack
pip install elasticsearch==2.4.1
e.在settings.py文件中加入如下配置:
INSTALLED_APPS = [
'haystack',
] ELASTICSEARCH_DSL = {
'default': {
'hosts': '127.0.0.1:8002'
},
} # Haystack
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
'URL': 'http://127.0.0.1:8002/', # 此处为elasticsearch运行的服务器ip地址,端口号默认为9200
'INDEX_NAME': 'dj_pre_class', # 指定elasticsearch建立的索引库的名称
},
} # 设置每页显示的数据量
HAYSTACK_SEARCH_RESULTS_PER_PAGE = 5
# 当数据库改变时,会自动更新索引
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
2.后端功能实现(初始化索引)
# 在apps/news/search_indexes.py中创建如下类:(名称固定为search_indexes.py) from haystack import indexes
# from haystack import site from .models import News class NewsIndex(indexes.SearchIndex, indexes.Indexable):
"""
News索引数据模型类
"""
text = indexes.CharField(document=True, use_template=True)
id = indexes.IntegerField(model_attr='id')
title = indexes.CharField(model_attr='title')
digest = indexes.CharField(model_attr='digest')
content = indexes.CharField(model_attr='content')
image_url = indexes.CharField(model_attr='image_url')
# comments = indexes.IntegerField(model_attr='comments') def get_model(self):
"""返回建立索引的模型类
"""
return News def index_queryset(self, using=None):
"""返回要建立索引的数据查询集
""" return self.get_model().objects.filter(is_delete=False, tag_id=1)
from haystack.views import SearchView as _SearchView class SearchView(_SearchView):
# 模版文件
template = 'news/search.html' # 重写响应方式,如果请求参数q为空,返回模型News的热门新闻数据,否则根据参数q搜索相关数据
def create_response(self):
kw = self.request.GET.get('q', '')
if not kw:
show_all = True
hot_news = models.HotNews.objects.select_related('news'). \
only('news__title', 'news__image_url', 'news__id'). \
filter(is_delete=False).order_by('priority', '-news__clicks') paginator = Paginator(hot_news, settings.HAYSTACK_SEARCH_RESULTS_PER_PAGE)
try:
page = paginator.page(int(self.request.GET.get('page', 1)))
except PageNotAnInteger:
# 如果参数page的数据类型不是整型,则返回第一页数据
page = paginator.page(1)
except EmptyPage:
# 用户访问的页数大于实际页数,则返回最后一页的数据
page = paginator.page(paginator.num_pages)
return render(self.request, self.template, locals())
else:
show_all = False
qs = super(SearchView, self).create_response()
return qs
# 创建templates/search/indexes/news/news_text.txt文件(文件名为:应用名_text.txt)
{{ object.title }}
{{ object.digest }}
{{ object.content }}
# 在虚拟机中执行如下命令,生成索引
python manage.py rebuild_index
最新文章
- C程序语法(无左递归)
- STM32 KEIL不能输入仿真引脚端口error 65: access violation at 0x40021000 : no 'read' permission
- iOS 打电话、发短信、邮件、打开网址、调用应用等合集
- 配置jdk
- 设置html的div中背景图片长宽
- 【niubi-job——一个分布式的任务调度框架】----FAQ文档
- C# 中将多个空格替换成一个空格
- 【hdu3341-Lost's revenge】DP压缩+AC自动机
- ARM指令协处理器处理指令
- Java和.NET的GZIP压缩功能对比
- 【HDOJ】2487 Ugly Windows
- Winform - TreeView控件,只展开根目录
- html-图片button,抓包---Shinepans
- UNIX网络编程中的需要注意的问题
- 求从n个数组任意选取一个元素的所有组合
- highcharts 系统梳理笔记
- sqlserver 查询 inner join 同一表2次 只出一条查询结果
- Socket模拟HTTP请求
- Spring Data JPA 常用注解 @Query、@NamedQuery
- 微信 js api[转]
热门文章
- 【leetcode_easy】581. Shortest Unsorted Continuous Subarray
- iOS-浅谈iOS中三种生成随机数方法
- Egret入门学习日记 --- 第十四篇(书中 5.4~5.6节 内容)
- eNSP——RSTP的基础配置
- 【AtCoder】diverta 2019 Programming Contest 2
- setting中executable for debug session对话框
- docker 的常用命令汇总
- Django 关联查询
- WUSTOJ 1232: 矩阵乘法(C)
- Angular系列-AngularJs1使用Ace编辑器