使用Django中的Solr进行全文搜索(Full Text Search)

2023-04-11 00:00:00 django solr 全文
  1. 安装和配置solr

首先需要安装和配置solr。可以参考solr官网(https://lucene.apache.org/solr/)进行安装和配置。

  1. 安装和配置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地址。

  1. 定义模型和搜索索引

在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 }}

  1. 执行索引

Haystack支持实时索引,意味着在模型保存时自动将模型数据添加到搜索引擎中。只需执行以下命令:

python manage.py rebuild_index

  1. 搜索数据

现在我们可以在Django应用中进行全文搜索了。假如我们需要搜索“pidancode.com”或“皮蛋编程”的博客内容,可以这样做:

from haystack.query import SearchQuerySet

results = SearchQuerySet().filter(content='pidancode.com') | SearchQuerySet().filter(content='皮蛋编程')

这个查询实际上是搜索博客内容中包含“pidancode.com”或“皮蛋编程”的结果。结果是一个包含匹配结果的SearchQuerySet对象,可以使用迭代器进行遍历。

至此,我们就可以使用Django中的Solr进行全文搜索了。

相关文章