微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PostgreSQL和Django中的不精确全文搜索

我是Postgresql的新手,我不确定如何进行不精确的全文搜索.这并不重要,但我正在使用Django.换句话说,我正在寻找以下内容

q = 'hello world'
queryset = Entry.objects.extra(
    where=['body_tsv @@ plainto_tsquery(%s)'],params=[q])
for entry in queryset:
    print entry.title

在哪里我的条目列表应该包含’hello world’或类似的东西.然后应根据它们的值与指定字符串的距离来排序列表.例如,我希望查询包含包含“Hello World”,“hEllo world”,“helloworld”,“hell world”等的条目,其中某种排名表示每个项目距离完美的距离,查询字符串不变.

你会怎么做呢?

解决方法

你最好的选择是使用 Django raw querysets,我用MysqL来执行全文匹配.如果数据全部在数据库中并且Postgres提供匹配功能,则使用它是有意义的.加上Postgres提供了一些非常有用的东西,包括词干等全文查询.

基本上它可以让你编写你想要的实际查询然后返回模型(只要你明显查询模型表).

这给您带来的好处是,您可以在Postgres中首先测试您将使用的确切查询,the documentation可以很好地覆盖全文查询.

目前原始查询集的主要问题是它们不支持计数.因此,如果您要返回大量数据并对应用程序有内存限制,则可能需要做一些聪明的事情.

然而,“不精确”匹配并不是全文搜索功能的一部分.相反,你想要postgres fuzzystrmatch contrib模块.它的用法described here和索引.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐