[史上最全] python Django如何实现全文检索[一看就会]
在Django中实现全文检索功能,可以使用Django的内置模型管理器Manager
,或者使用外部库如Haystack
来集成全文搜索引擎,如Elasticsearch
或Whoosh
。以下是使用Haystack
和Whoosh
的一个基本示例:
- 安装必要的包:
pip install django
pip install haystack
pip install whoosh
- 在Django项目的
settings.py
中添加haystack
和whoosh
引擎:
INSTALLED_APPS = [
# ...
'haystack',
# ...
]
# 全文搜索配置
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine',
'PATH': os.path.join(BASE_DIR, 'whoosh_index'),
},
}
- 创建Whoosh搜索索引:
在应用目录下创建search_indexes.py
文件,并定义模型的索引:
import datetime
from haystack import indexes
from myapp.models import MyModel
class MyModelIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
def get_model(self):
return MyModel
def index_queryset(self, using=None):
return self.get_model().objects.all()
在同目录下创建my_model_text.txt
模板,用于指定索引哪些字段:
{{ object.field1 }}
{{ object.field2 }}
# 可以添加更多字段
- 运行命令创建索引:
python manage.py rebuild_index
- 在视图中使用搜索:
from haystack.forms import SearchForm
from django.template.response import TemplateResponse
def search(request):
form = SearchForm(request.GET, load_all=True)
results = form.search()
return TemplateResponse(request, 'search.html', {'form': form, 'results': results})
- 创建搜索表单模板
search.html
:
<form method="get" action="/search/">
<input type="text" name="q" />
<input type="submit" value="Search" />
</form>
{% if results %}
<ul>
{% for result in results %}
<li><a href="{{ result.object.get_absolute_url }}">{{ result.object.title }}</a></li>
{% empty %}
<li>No results found.</li>
{% endfor %}
</ul>
{% endif %}
这样就可以在Django应用中实现全文检索功能了。记得根据实际模型字段调整search_indexes.py
和my_model_text.txt
中的代码。
评论已关闭