PostgreSQL和Django中的不精确全文搜索
发布时间:2020-12-13 16:09:26 所属栏目:百科 来源:网络整理
导读:我是PostgreSQL的新手,我不确定如何进行不精确的全文搜索.这并不重要,但我正在使用Django.换句话说,我正在寻找以下内容: q = 'hello world'queryset = Entry.objects.extra( where=['body_tsv @@ plainto_tsquery(%s)'],params=[q])for entry in queryset:
我是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和索引. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |