2016-04-29 45 views
-1

ここで問題です:PostgreSQLの全文検索:カントはのtsvectorの部分一致を得る

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

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

しかし、問題は私がクエリのアドレスについて何も知らないということです。私は、国、都市、または通りが入ってくる文字列のどこにあるのかを定義することはできません。私は住所がどのような言葉の順序をしているのか、それとも余分な言葉を含んでいるのか分かりません。

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

それで、入ってくる文字列に最適な一致を返すためにtsqueryを構築する方法はありますか?または部分一致かもしれませんか?私がそれをまたはの代わりにの代わりに使用するように強制しようとしたとき、そしてどこでもtsqueryでが返ってきました。 postgresqlでベクトル交差が必要です。

答えて

1

これにはsmlar(PDF)拡張機能を使用することをおすすめします。それはテキスト検索を書いた同じ人によって書かれました。それはあなたが「余分な」クエリ用語を可能TF-IDF類似度を、使用することができます

ここ

それをコンパイルするために(私はWindows上でそれをコンパイルする方法を考え出したていない)方法は次のとおりです。

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

それを使用する方法は次のとおりです。

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

関連する問題