0

hstore に複合型のを設定するための構文を理解できないようです-- 注: レコードを hstore に変換したくありません。

select hstore('hello => ROW(1,2)');

それは簡単なことだと思います。しかし、今日、グーグルは私の友達ではありません。

ユース ケース : カスタム逆インデックス。

データは、語彙素の逆インデックスをモデル化しています。複合データ型は、ドキュメント クラスタリングの実装に使用する語彙素に関連するさまざまな確率です。これを行うためのより良い方法を知っている人はいますか? 転置インデックス内の key->posting ペアに属性をアタッチできる場合は、外部システムを使用することにオープンです。

私がやろうとしていることをしっかりとサポートしていれば、外部のものを使用します。タプルごとに3〜10kの語彙素を貼り付けてからバッチ処理を行うと、hstore全体を解析して解析する必要があるため、厄介になると思います。変換された。

現時点では、私の語彙素はタプルあたり 50 ~ 1k の範囲にあり、ほとんどが 100 未満であり、研究アルゴリズムのためにそれを行っているだけです。しかし、これを行うためのより良い方法が必要です。

4

1 に答える 1

1

の文字列hstoreは二重引用符で囲みます。hstoreはテキスト値のみをサポートし、それ以外はサポートしないため、他のタイプをテキスト表現として保存する必要があります。

SELECT hstore('k => "(1,2)"');

例えば:

regress=> SELECT (hstore('k => "(1,2)"')) -> 'k';
 ?column? 
----------
 (1,2)
(1 row)

これは、値をキャストして使用する必要があることを意味します。たとえば、次のようになります。

regress=> CREATE TYPE pair AS (a integer, b integer);
CREATE TYPE
regress=> SELECT ((hstore('k => "(1,2)"')) -> 'k')::pair;
 pair  
-------
 (1,2)
(1 row)

または代わりに配列を使用して、複合型を回避します。

regress=> SELECT ((hstore('k => "{1,2}"')) -> 'k')::integer[];
 int4  
-------
 {1,2}
(1 row)

配列は、[]演算子を使用して 1 からインデックス付けされます[1]

これは、値を毎回解析して変換する必要があるため、一般的に非常に非効率的です。問題の性質と、最初に hstore が必要な理由についてあまり話していない場合、代替案を提案することは実際には実用的ではありません。

于 2013-11-10T09:43:47.717 に答える