优质文章,第一时间送达! 在互联网上的各类网站中,无论大小,基本上都会有一个搜索框,用来给用户对内容进行搜索,小到站点搜索,大到搜索引擎搜索。 从简单的来说,搜索功能确实很简单,一个简单的 而从复杂的来看,无论是搜索的精度还是搜索的效率,都是有很深的研究范围的。 对于简单的搜索功能来说,一个 什么是全文搜索?百度百科如是说:
是不是看得不明不白的?讲一个简单的例子大概就理解了。正常情况下,我们搜索“Python 安装教程”,如果是普通的搜索,会直接使用 select 数据库中包含“Python 安装教程”的内容。但是全文搜索,会首先将搜索词拆分成:“Python 安装教程”、“Python”、“安装教程”、“安装”、“教程”等,然后用这些拆分后的词组进行搜索。 市面上所有的搜索引擎都使用了全文搜索: 最近“MrDoc 交流群”里让觅道文档添加上全文搜索的呼声很高,遂打算在觅道文档中把常规的 select 查询搜索替换为全文搜索。 最常见的开源全文搜索引擎是 安装依赖库如上述所言,本次纯 Python 方案实现中英文全文搜索使用到了如下 3 个库:
需要对其进行安装,使用 pip 命令进行安装即可: pip install whoosh
pip install jieba settings 配置首先需要在 Django 项目的 settings.py 文件中进行配置。 第一、在 INSTALLED_APPS 中添加 haystack 库: 第二、添加配置 haystack 的配置项
创建索引在 app_doc 目录下新建一个名为 search_indexes.py 的文件,在其中输入如下内容: 在 template 目录下新建一色名为 search 的目录,然后在 search 目录下新建一个名为 indexes 的目录,接着在其中新建一个名为 app_doc 的目录(与 Django 应用同名),最后在这个/template/search/app_doc 目录下新建一个名称 doc_text.txt 的文件(模型名称_text.txt),在其中输入需要索引的模型字段: {{object.name}} 创建中文分词器由于 whoosh 对中文的分词能力不行,如果我们搜索中文,其八成不会对其进行分词,所以我们额外引入了 jieba 模块来进行中文分词。 在 /MrDoc/app_doc/search 目录下新建一个名为 chines_analyzer.py 的文件,在其中写入如下代码: 创建完中文分词器之后,我们就可以自定义 whoosh 的搜索引擎了。 自定义 whoosh 搜索引擎在
替换为: from app_doc.search.chinese_analyzer import ChineseAnalyzer as StemmingAnalyzer 这样,我们自定义能够进行中文分词的 whoosh 引擎就完成了。 编写视图函数完成上述步骤之后,全文搜索引擎幕后的工作就已经完成了,我们接下来需要按照 Django 的方式,编写逻辑视图,并进行 HTML 模板的渲染。 在这里,州的先生在/MrDoc/app_doc/下新建了一个名为 views_search.py 的文件来放置全文搜索的视图函数,继承 HTML 模板渲染全文搜索引擎的数据默认返回在了特定的 HTML 模板中,州的先生没有对此进行自定义,所以按照 haystack 的要求,在 生成索引最后我们需要在命令行终端生成一下索引文件,使用如下命令:
这样,就实现了纯 Python 方案的中英文全文搜索,效果如下动图所示: 文中所涉代码均为 MrDoc 觅道文档源码,包括:
源码地址为:
文末福利还有 2 张高清的 PyCharm 快捷键一览图,一张 Windows ,一张 Mac,放在桌面上,需要的时候打开一查,非常方便。。 怎么获取呢? |
|