使用Django中的Solr进行全文搜索(Full Text Search)
- 安装和配置solr
首先需要安装和配置solr。可以参考solr官网(https://lucene.apache.org/solr/)进行安装和配置。
- 安装和配置Django Haystack
Django Haystack是一个开源的Django全文搜索框架,可以与多种搜索引擎(包括solr)进行集成。安装Haystack:
pip install django-haystack
在Django项目的setting.py中添加以下配置:
INSTALLED_APPS = [
#...
'haystack',
]
Haystack settings
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'haystack.backends.solr_backend.SolrEngine',
'URL': 'http://127.0.0.1:8983/solr/',
'TIMEOUT': 60 * 5,
'INCLUDE_SPELLING': True,
},
}
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
这里设置了solr作为搜索引擎,并且指定了solr的URL地址。
- 定义模型和搜索索引
在Django中定义模型和索引,以便进行全文搜索。假设我们有一个Blog模型:
class Blog(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
pub_date = models.DateTimeField(auto_now_add=True)
我们需要创建一个搜索索引,以便Haystack可以对这个模型进行全文搜索。在应用下创建一个search_indexes.py文件:
from haystack import indexes
from blog.models import Blog
class BlogIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
pub_date = indexes.DateTimeField(model_attr='pub_date')
def get_model(self): return Blog
在这个搜索索引中,我们指定了对Blog模型的全文搜索,并且索引了模型的标题和内容。使用use_template=True表示会在模板文件中指定需要索引的字段。
为了让模板文件知道需要索引哪些字段,需要在应用下创建一个templates/search/indexes/blog/blog_text.txt文件,添加以下内容:
{{ object.title }}
{{ object.content }}
- 执行索引
Haystack支持实时索引,意味着在模型保存时自动将模型数据添加到搜索引擎中。只需执行以下命令:
python manage.py rebuild_index
- 搜索数据
现在我们可以在Django应用中进行全文搜索了。假如我们需要搜索“pidancode.com”或“皮蛋编程”的博客内容,可以这样做:
from haystack.query import SearchQuerySet
results = SearchQuerySet().filter(content='pidancode.com') | SearchQuerySet().filter(content='皮蛋编程')
这个查询实际上是搜索博客内容中包含“pidancode.com”或“皮蛋编程”的结果。结果是一个包含匹配结果的SearchQuerySet对象,可以使用迭代器进行遍历。
至此,我们就可以使用Django中的Solr进行全文搜索了。
相关文章