5

我是 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”等的条目,并通过某种排名指示每个项目与完美之间的距离,未更改的查询字符串。

你会怎么做呢?

4

2 回答 2

2

你最好的选择是使用Django raw querysets,我用它和 MySQL 来执行全文匹配。如果数据都在数据库中,并且 Postgres 提供了匹配功能,那么使用它是有意义的。此外,Postgres 在全文查询等方面提供了一些非常有用的东西。

基本上,它可以让您编写所需的实际查询但返回模型(只要您显然正在查询模型表)。

这给您带来的好处是您可以测试您将首先在 Postgres 中使用的确切查询,文档很好地涵盖了全文查询。

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


然而,“不精确”匹配并不是全文搜索功能的一部分。相反,您需要 postgres blurstrmatch contrib 模块。它的用途在这里用索引来描述。

于 2011-04-19T09:12:47.330 回答
1

最好的办法是为此目的使用搜索引擎。Django-haystack支持三种不同搜索引擎的集成。

于 2011-04-18T23:16:40.037 回答