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和索引.

相关文章

项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果...
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表...
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正...
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本...
wamp 环境 这个提示就是说你的版本低于10了。 先打印ph...
psycopg2.OperationalError: SSL SYSCALL error: EOF detect...