問題タブ [tsvector]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
postgresql - PostgreSQL8.4tsvectorパーサーの`file`トークンタイプを無効にする
radio/tested
次のようなクエリでヒットを返したいなどのシーケンスを含むドキュメントがいくつかあります。
残念ながら、デフォルトのパーサーは(Windows環境にあるにもかかわらず)トークンradio/tested
としてfile
受け取るため、上記のクエリとは一致しません。それを実行ts_debug
すると、ファイルとして認識されていることがわかり、語彙素がradio/tested
2つの語彙素とではなく語彙素になっradio
てしまいtest
ます。
file
トークンを検索しないようにパーサーを構成する方法はありますか?私は試した
...しかし、の出力は変更されませんでしたts_debug
。無効にする方法がある場合file
、または少なくともfile
途中でディレクトリ名を構成すると思われるすべての単語を認識させる方法がある場合、またはスラッシュをハイフンまたはスペースとして処理する方法がある場合(パフォーマンスに影響を与えることなく)自分でそれらをregexp_replace
することの)それは本当に役に立ちます。
postgresql - 複数の関連テーブルにわたるPostgres全文検索
これは非常に単純な質問かもしれないので、事前にお詫びしますが、私はデータベースの使用法に非常に慣れていません。
Postgresに複数の結合されたテーブル全体で全文検索を実行させたいのですが。関連するモデルUserProfileとUserInfoを持つモデルUserのようなものを想像してみてください。検索はユーザーのみを対象としますが、UserProfileおよびUserInfoからの情報が含まれます。
検索にジンインデックスを使用することを計画しています。ただし、テーブル全体から集約されたtsvectorを保持し、トリガーを設定して最新の状態に保つために、Userテーブルに個別のtsvector列が必要かどうかはわかりません。または、tsvector列なしでインデックスを作成できる場合は、関連するテーブルの関連するフィールドのいずれかが変更されるたびに、それ自体を最新の状態に保ちます。また、これをすべて作成するためのコマンドの構文に関するヒントもいただければ幸いです。
postgresql - tsvectorでの語彙素の出現を削除する簡単な方法はありますか?
テーブルにtsvector列があり、tsvectorから語彙素を削除できるようにしたいと思います。
新しいtsvectorを再構築するためにts_statをいじり始めましたが、それは非常に複雑なようです。
それを行う簡単な方法はありますか?
ruby-on-rails - データベース固有のデータ型を使用した Rails の移行
私は現在、Postgres に固有のデータ型である tsvector を追加する Rails 移行を実行しています。組み込みのテキスト検索機能で Postgres が期待する形式で検索情報を保持します。
これは私の移行からの行です:
すべてが正常に機能しているようで、検索はそれで機能します。ただし、schema.rb を開くと、次のようになりました。
これにより、user テーブルで単体テストを実行できなくなります。また、schema.rb がデータベースの正式な定義であると想定されていることを考えると、非常に危険なように見えます。
tsearchable など、期待どおりに tsvector を保存する同じアプローチを使用しているように見える Rails プラグインがいくつかあることに気付きました。テストせず、データベースの正式な定義なしで、本当に立ち往生しているのでしょうか?
ruby-on-rails - Ruby on Rails:findを使用しないときにSQLの文字列をサニタイズする方法は?
可能であれば、バグのある可能性のある独自の正規表現を手動で作成することなく、ユーザー入力を含む文字列をサニタイズしようとしていますが、それが唯一の方法である場合は、誰かが私を正しい方向に向けることができれば幸いです。何かが欠けている可能性が低い正規表現。Railsには、ネイティブSQLコマンドを入力できるメソッドがいくつかありますが、それらのユーザー入力をどのようにエスケープするのでしょうか。
私が尋ねている質問は幅広いものですが、私の特定のケースでは、Railsが私が知る限りネイティブに理解していないPostgresデータベースの列、プレーンテキスト検索情報を保持するtsvectorを使用しています。Railsは文字列のように読み書きできますが、文字列とは異なり、モデル内でvector =のようなことをすると、自動的にエスケープされないようです。
たとえば、model.name ='::'を実行すると、nameは文字列であり、正常に機能します。model.vector ='::'を実行すると、エラーが発生します。
これはセミコロンのエスケープの欠如によって引き起こされた問題のようであり、手動でvector='::'を設定できます。
私も素晴らしい考えを持っていました、多分私はちょうど次のようなものを呼ぶことができます:
ただし、この構文は機能しません。これは、生のSQLコマンドが、?を使用して文字列をエスケープおよび入力するfindのメソッドにアクセスできないためです。マーク。
これは、あらゆるタイプのユーザー入力でconnection.executeを呼び出すのと同じ問題になります。これは、すべて文字列のサニタイズに帰着するためですが、RailsのSQL文字列サニタイズメソッドを手動で呼び出す方法が見つからないようです。誰かアドバイスはありますか?
postgresql - PostgreSQL の全文検索で語彙素がランダムに削除される
(これはすべて、Ubuntu 10.04、FWIW 上の PostgreSQL 9.0.1 で行われました。)
私は、二重メタフォン アルゴリズムに基づいて、PostgreSQL 用に名前専用の独自の字句変換関数を作成しようとしました。C lexize 関数を生成するために、dict_xsyn の例から始めて、基本的に同義語ルックアップのために double metaphone を交換しました。
しかし、おそらく 20% のto_tsvector
確率で呼び出され、語彙素を落としているようです。例として、米国国勢調査局の名前のリストを含むテーブルを作成しました。
次に、ベクター列を追加してto_tsvector
、メタフォン ディクショナリを入力します。
多数の vec フィールドが空です! 実際には:
その一括更新を実行してから、一致しないフィールドを繰り返しカウントし、毎回異なるカウントを取得できます。これは、異なる行で実際のベクトルが計算されていないためです。
しかし、私のレキシズ関数自体は大丈夫だと思いますか?
私はそれを何度も行うことができ、毎回0の不一致を得ることができます.
関連するテキスト検索辞書と構成を次のように作成しています。
dict_xsyn の例からほぼそのままです。
どうしたの?これらのものがどこにドロップされているかを把握するにはどうすればよいですか?
追加: 9.1 でこれを試してみました。to_tsvector が不発の tsvector を生成する速度は大幅に減少します (80000 以上のレコードのうち 5 (5k ではなく 5 だけ) から 7000 レコード)。しかし、彼らはまだそこにいます。
postgresql - 全文検索で接頭辞で終わるフレーズを一致させる
SELECT * FROM table WHERE attr LIKE '%text%'
PostgreSQL で tsvector を使用するようなものをエミュレートする方法を探しています。
辞書を使用せずに tsvector 属性を作成しました。さて、次のようなクエリ...
... 'Physics'、'PHP' などのすべてのタイトルを返します。しかし、タイトルが 'Zend Fram' で始まるすべてのレコードを返すクエリを作成するにはどうすればよいでしょうか (たとえば、'Zend Framework' を返す必要があります)。
もちろん、次のようなものを使用できます。
ただし、これは少し厄介なようです。
したがって、問題は、次のようなものを使用して上記のクエリを定式化する方法はありますか?
postgresql - PostgreSQL tsvector tsquery バグ?
これはバグですか、それとも機能ですか?tsvector 属性に (辞書を使用せずに) インデックスを作成しました。
クエリ
「基本的な本能」を返します。ただし、クエリ
レコードをまったく返しません。2 番目の (より一般的なクエリ) が最初のクエリよりも少ない結果を返す理由がわかりません。
さよなら
sql - この全文検索クエリを最適化するにはどうすればよいですか?(tsvector)(1.5 mil行)
現在、PostgreSQLに全文検索クエリ(以下を参照)があり、150万行の単一のテーブルをスキャンして、「すべて」の用語と「任意」の用語に一致するすべてのアイテムを検索します。
結果がほとんどないクエリでは、クエリは正しく実行され、平凡な速度(〜2〜3秒)で実行されます。そして、100,000以上の試合(〜15-100秒)である結果のひどい速度で
クエリは、最初に用語タイプ(すべての用語が一致し、次にすべての用語が一致)で結果を並べ替え、次に関連性のts_rank_cd計算で結果を並べ替えます。(また、期間などのインデックスを作成できる既知の列で並べ替える、より単純なバリエーションもあります)
関連するすべての列にインデックスが付けられており、システムモニタリングにより、メモリとCPUが最大限に活用されておらず、ボトルネックがディスクIOであることがわかります。
サーバーはUbuntuServer10.04です。ソリューションを満たすために必要に応じて、バックエンドを介してメモリとCPUパワーを動的に簡単に増やすことができます。
現在、データベースは本番環境では静的であり、データベースへの書き込みは本番サーバーでは行われません。したがって、それが有益である場合、正確なままのインデックスを完全かつ正確に生成することが可能です。
改善の道を見つけるための助けをいただければ幸いです。追加情報は、リクエストに応じてタイムリーに提供できます。