codecamp

Django4.0 搜索-文档搜索

标准数据库操作对于大量文本搜索来说太过简陋了。虽然上面的示例可以看作是对字符串的操作,但是全文搜索查看的是实际的单词。依据所使用的系统,可以采用下面的某些方法:

  • 忽略 “停用词语”,例如 "a","the","and"。
  • 词干化,这样 "pony" 和 "ponies" 会被认为是一样的。
  • 根据不同的标准为单词设置权重,例如其在文本中出现的频率,或所属字段(如标题或关键字)的重要性。

使用搜索软件有很多选项,最常见的有 Elastic 和 Solr。它们都是基于全文搜索的解决方案。要用它们搜索来自 Django 模型的数据,你需要一个抽象层,将数据(包括对数据库 id 的指针)转换为文本文档。当使用该引擎的某次搜索返回了一份文档,你可以在数据库中查看它。有很多第三方库被设计为处理这种问题。

PostgreSQL 支持

PostgreSQL 内置了其专属的全文本搜索实现。虽然并不像其它搜索引擎那样强大,但它的优点是内置在数据库中,所以它能很方便的与其它关联查询条件进行联合查询,如按分类查询。
django.contrib.postgres​ 模块提供了一些助手函数来执行这些查询。例如,查询可能筛选出所有提到了 "cheese" 的博客条目:

>>> Entry.objects.filter(body_text__search='cheese')
[<Entry: Cheese on Toast recipes>, <Entry: Pizza recipes>]

你也可以在联合字段或关联模型上进行筛选:

>>> Entry.objects.annotate(
...     search=SearchVector('blog__tagline', 'body_text'),
... ).filter(search='cheese')
[
    <Entry: Cheese on Toast recipes>,
    <Entry: Pizza Recipes>,
    <Entry: Dairy farming in Argentina>,
]


Django4.0 搜索-一个更高级的数据库比较函数
Django4.0 管理器-管理器名称
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Django4.0 模型和数据库

Django4.0 处理HTTP请求

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }