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」またはそれに類似したものが含まれている必要があります。リストは、その値が指定された文字列からどれだけ離れているかに応じて並べ替える必要があります。たとえば、「He​​llo World」、「hEllo world」、「helloworld」、「hell world」などを含むエントリをクエリに含め、各項目が完璧からどれだけ離れているかを示す何らかのランキングを付けたいと思います。変更されていないクエリ文字列。

これをどのように行うつもりですか?

4

2 に答える 2

2

あなたの最善の策は、Django raw querysetsを使用することです.MySQLでそれを使用して、全文一致を実行します. データがすべてデータベースにあり、Postgres がマッチング機能を提供する場合、それを使用するのは理にかなっています。さらに、Postgres は、全文クエリを使用したステミングなどの点で、いくつかの非常に便利な機能を提供します。

基本的に、必要な実際のクエリを記述できますが、モデルを返します (明らかにモデル テーブルをクエリしている場合)。

これにより得られる利点は、Postgres で最初に使用する正確なクエリをテストできることです。ドキュメントは全文クエリをかなりよくカバーしています。

現時点で生のクエリセットに関する主な落とし穴は、それらがカウントをサポートしていないことです。したがって、大量のデータを返し、アプリケーションにメモリの制約がある場合は、巧妙な操作が必要になる場合があります。


ただし、「不正確な」一致は、実際には全文検索機能の一部ではありません。代わりに、postgres fuzzystrmatch contrib モジュールが必要です。その使用法は、ここでインデックスとともに説明されています。

于 2011-04-19T09:12:47.330 に答える
1

この目的のために検索エンジンを使用するのが最善でしょう。Django-haystackは、3 つの異なる検索エンジンの統合をサポートしています。

于 2011-04-18T23:16:40.037 に答える