問題は次のとおりです。
プレーン テキストと 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で。