Django添加全文搜索功能入门篇
admin
2023-07-31 00:47:10
0

感觉网络上关于Django全文搜索的中文文章太少,并且讲的也不是很到位,就是简单介绍了怎么配置,并没有说这样配置有什么用,所以依然很迷茫。所以希望我这篇文章能够帮助到后来人。

一、使用的工具

  • haystack是django的开源搜索框架,该框架支持Solr, Elasticsearch, Whoosh, *Xapian*搜索引擎,不用更改代码,直接切换引擎,减少代码量。
  • 搜索引擎使用Whoosh,这是一个由纯Python实现的全文搜索引擎,没有二进制文件等,比较小巧,配置比较简单,当然性能自然略低。
  • 中文分词Jieba,由于Whoosh自带的是英文分词,对中文的分词支持不是太好,故用jieba替换whoosh的分词组件。
  • 其他:Python 3.4.4, Django 1.8.3,Debian 4.2.6_3

二、配置说明

现在假设我们的项目叫做Project,有一个myapp的app,简略的目录结构如下。

12345 Project   Project     settings.py   blog     models.py

models.py的内容假设如下:

123456789101112 from django.db import modelsfrom django.contrib.auth.models import User  class Note(models.Model):    user = models.ForeignKey(User)    pub_date = models.DateTimeField()    title = models.CharField(max_length=200)    body = models.TextField()     def __str__(self):        return self.title

1. 首先安装各工具

1 pip install whoosh djangohaystack jieba

2. 添加 Haystack 到Django的 INSTALLED_APPS

配置Django项目的settings.py里面的 INSTALLED_APPS添加Haystack,例子:

123456789101112 INSTALLED_APPS = [         \’django.contrib.admin\’,        \’django.contrib.auth\’,         \’django.contrib.contenttypes\’,         \’django.contrib.sessions\’,         \’django.contrib.sites\’,            # Added. haystack先添加,          \’haystack\’,           # Then your usual apps… 自己的app要写在haystakc后面          \’blog\’,]

点我看英文原版

3. 修改 你的 settings.py,以配置引擎

本教程使用的是Whoosh,故配置如下:

1234567 import osHAYSTACK_CONNECTIONS = {    \’default\’: {        \’ENGINE\’: \’haystack.backends.whoosh_backend.WhooshEngine\’,        \’PATH\’: os.path.join(os.path.dirname(__file__), \’whoosh_index\’),    },}

其中顾名思义,ENGINE为使用的引擎必须要有,如果引擎是Whoosh,则PATH必须要填写,其为Whoosh 索引文件的存放文件夹。

其他引擎的配置见官方文档

4.创建索引

如果你想针对某个app例如mainapp做全文检索,则必须在mainapp的目录下面建立search_indexes.py文件,文件名不能修改。内容如下:

12345678910111213141516 import datetimefrom haystack import indexesfrom myapp.models import Note class NoteIndex(yon-e\”>models import Note class NoteIndex(ify\”>

  • haystack是django的开源搜索框架,该框架支持Solr, Elasticsearch, Whoosh, *Xapian*搜索引擎,不用更改代码,直接切换引擎,减少代码量。
  • 搜索引擎使用Whoosh,这是一个由纯Python实现的全文搜索引擎,没有二进制文件等,比较小巧,配置比较简单,当然性能自然略低。
  • 中文分词Jieba,由于Whoosh自带的是英文分词,对中文的分词支持不是太好,故用jieba替换whoosh的分词组件。
  • 其他:Python 3.4.4, Django 1.8.3,Debian 4.2.6_3
  • 二、配置说明

    现在假设我们的项目叫做Project,有一个myapp的app,简略的目录结构如下。

    12345 Project   Project     settings.py   blog     models.py

    models.py的内容假设如下:

    123456789101112 from django.db import modelsfrom django.contrib.auth.models import User  class Note(models.Model):    user = models.ForeignKey(User)    pub_date = models.DateTimeField()    title = models.CharField(max_length=200)    body = models.TextField()     def __str__(self):        return self.title

    1. 首先安装各工具

    1 pip install whoosh djangohaystack jieba

    2. 添加 Haystack 到Django的 INSTALLED_APPS

    配置Django项目的settings.py里面的 INSTALLED_APPS添加Haystack,例子:

    123456789101112 INSTALLED_APPS = [         \’django.contrib.admin\’,        \’django.contrib.auth\’,         \’django.contrib.contenttypes\’,         \’django.contrib.sessions\’,         \’django.contrib.sites\’,            # Added. haystack先添加,          \’haystack\’,           # Then your usual apps… 自己的app要写在haystakc后面          \’blog\’,]

    点我看英文原版

    3. 修改 你的 settings.py,以配置引擎

    本教程使用的是Whoosh,故配置如下:

    1234567 import osHAYSTACK_CONNECTIONS = {    \’default\’: {        \’ENGINE\’: \’haystack.backends.whoosh_backend.WhooshEngine\’,        \’PATH\’: os.path.join(os.path.dirname(__file__), \’whoosh_index\’),    },}

    其中顾名思义,ENGINE为使用的引擎必须要有,如果引擎是Whoosh,则PATH必须要填写,其为Whoosh 索引文件的存放文件夹。

    其他引擎的配置见官方文档

    4.创建索引

    如果你想针对某个app例如mainapp做全文检索,则必须在mainapp的目录下面建立search_indexes.py文件,文件名不能修改。内容如下:

    12345678910111213141516 import datetimefrom haystack import indexesfrom myapp.models import Note class NoteIndex

    相关内容

    热门资讯

    Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
    500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
    定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
    scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
    65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
    小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
    pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
    微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
    Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
    python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...