-1

問題は次のとおりです。

プレーン テキストと tsvectors のアドレスを持つ PostgreSQL のテーブルがあります。そして、このようなクエリで住所レコードを見つけようとしています。

SELECT * FROM address_catalog
WHERE address_catalog.search_vector @@ to_tsquery('123456:* & Klingon:* & Empire:* & Kronos:* & city:* & Matrok:* & street:* & 789:*')

しかし、問題は、クエリの住所について何も知らないことです。国、都市、または通りが着信文字列のどこにあるかを定義できません。住所の単語の順序がわかりません。また、余分な単語が含まれているかどうかもわかりません。

国と都市のみを検索できますが、着信文字列に通り、インデックス、またはその他のものが含まれている場合、すべてのベクトル トークンが結合されているため、検索は何も返しません。同時に、余分な単語が文字列のどこにあるのかわからないため、一部の文字列部分を削除したり、論理和を使用したりすることはできません。

では、tsquery を構築して、着信文字列に最適な一致を返す方法はありますか? それとも部分一致?tsquery のどこでもANDの代わりにORを使用するように強制しようとすると、ほぼデータベース全体が返されました。ベクトルの交差が必要です... postgresqlで。

4

1 に答える 1

1

I'd recommend using the smlar (PDF) extension for this. It was written by the same guys that wrote text search. It lets you use the TF-IDF similarity measure, which allows for "extraneous" query terms

Here's how to compile it (I haven't figured out how to compile it on Windows):

http://blog.databasepatterns.com/2014/07/postgresql-install-smlar-extension.html

And here's how to use it:

http://blog.databasepatterns.com/2014/08/tf-idf-text-search-in-postgres.html

于 2016-04-29T18:47:16.570 に答える