Ubuntu下安装Docker,Django使用Whoosh搜索引擎,使用ES(Elasticsearch)代替Whoosh
os.path.join(BASE_DIR,
- 本文目录导读:
- 1、安装Docker
- 2、Django使用Whoosh搜索引擎
- 3、使用ES代替Whoosh
在现代化的Web应用程序中,搜索功能已经成为了必不可少的一部分。而在实现搜索功能时,我们需要一个高效、快速、可扩展的搜索引擎。本文将介绍如何在Ubuntu下安装Docker,并通过Django框架使用Whoosh进行全文检索,在此基础上再介绍如何使用ES代替Whoosh提供更好的性能和扩展性。
安装Docker
首先,在Ubuntu系统上安装docker是必不可少的。这里我们采用官方提供的apt-get方式进行安装。
1. 首先更新apt-get:
“`
sudo apt-get update
2. 安装依赖包:
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
3. 添加GPG key:
curl -fsSL | sudo apt-key add –
4. 添加仓库地址:
对于x86_64/amd64版系统:
“`
sudo add-apt-repository “deb [arch=amd64] $(lsb_release -cs) stable”
对于armhf版系统:
sudo add-apt-repository “deb [arch=armhf] $(lsb_release -cs) stable”
5. 安装Docker:
sudo apt-get install -y docker-ce
6. 验证安装是否成功:
sudo docker run hello-world
如果能够看到hello world的输出,说明docker已经成功安装。
Django使用Whoosh搜索引擎
在Django中使用Whoosh进行全文检索非常简单。只需要按照以下步骤即可快速的实现搜索功能。
1. 安装Whoosh:
pip install Whoosh
2. 在settings.py中添加以下配置:
“`python
# 指定搜索引擎为Whoosh,存储路径为’whoosh_index’
HAYSTACK_CONNECTIONS = {
‘default’: {
‘ENGINE’: ‘haystack.backends.whoosh_backend.WhooshEngine’,
‘PATH’: os.path.join(BASE_DIR, ‘whoosh_index’),
},
}
# 指定要进行全文检索的模型类和字段名,这里以Blog模型类举例。
HAYSTACK_SIGNAL_PROCESSOR = ‘haystack.signals.RealtimeSignalProcessor’
HAYSTACK_SEARCH_RESULTS_PER_PAGE = 10
HAYSTACK_DEFAULT_OPERATOR = “AND”
# 指定要进行全文检索的字段名,默认是text,这里我们指定title和content两个字段。
class BlogIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
title = indexes.CharField(model_attr=’title’)
content = indexes.CharField(model_attr=’content’)
def get_model(self):
return Blog
def index_queryset(self, using=None):
return self.get_model().objects.all()
3. 在views.py中添加搜索功能:
from haystack.query import SearchQuerySet
def search(request):
query = request.GET.get(‘q’, ”)
sqs = SearchQuerySet().filter(content=query)
return render(request, ‘search.html’, {‘query’: query, ‘sqs’: sqs})
4. 在templates/search.html中添加搜索表单和展示搜索结果的代码:
“`html
{% extends “base.html” %}
{% block content %}
{% for result in sqs %}
{{ result.object.title }}
{{ result.object.content }}
{% empty %}
No results found.
{% endfor %}
{% endblock content %}
使用ES代替Whoosh
虽然Whoosh已经足够好用,但是当数据量达到一定程度时,性能和扩展性方面还有待提高。而Elasticsearch(简称ES)则可以提供更好的性能和扩展性。
下面我们将介绍如何在Django中使用ES进行全文检索。
1. 安装Python客户端:
pip install elasticsearch-dsl
“`python
# 指定搜索引擎为Elasticsearch,并指定服务器地址和索引名称。
‘ENGINE’: ‘haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine’,
‘URL’: ”,
‘INDEX_NAME’: ‘myblog’,
class BlogIndex(DocType):
title = Text(fields={‘raw’: Keyword()})
content = Text(analyzer=’snowball’)
class Meta:
index = ‘myblog’
3. 创建ES索引:
from elasticsearch_dsl.connections import connections
connections.create_connection(hosts=[‘localhost’], timeout=20)
BlogIndex.init()
4. 在views.py中添加搜索功能:
s = BlogIndex.search().query(
Q(“multi_match”, query=query, fields=[‘title’, ‘content’])
)
response = s.execute()
return render(request, “search.html”, {‘query’: query, ‘sqs’: response})
5. 在templates/search.html中添加搜索表单和展示搜索结果的代码(同Whoosh)。
本文介绍了如何在Ubuntu下安装Docker,并使用Django框架实现Whoosh全文检索功能。然后再介绍了如何使用ES代替Whoosh提供更好的性能和扩展性。希望本文能够帮助到需要实现搜索功能的开发者们。