Shinya Kawaji
kawaj****@gmail*****
2012年 4月 18日 (水) 10:40:37 JST
川路です。 立て続けの質問で恐縮ですが、ベクターカラムをソート順に使いたいので、 そのことで教えていただけますでしょうか。 「最終的にやりたいこと」を説明した方が他の解決方法が分かるかもしれません ので、前提としてそれを先に書かせていただきます。 全体として数十万件のデータが有り、主キーは数字になっています。 全文検索が主なのですが、ソート順の指定が別にあり、それが「約 50個の キーのうち、優先とするものをいくつか選ぶ」ということになっています。 そのソート順の指定が、例えば A〜Z まで有るとしたら(本当は 50個なのです が、単純化して 20数個に)、検索のたびに「H, B, Q の順で優先」とか、 指定がその都度変わります。 各データには、その A〜Z ごとに数字が割り振られています。 例えば「Hが 1、Bが 5、Qが 3」とか、そのような感じです。 求めるクエリの結果としては、 全文検索でヒットしたデータのうち、 H が 0のもの、1のもの、... B が 0のもの、1のもの、... Q が 0のもの、1のもの、... の順に並べる ということになります。 これを単純に実装する場合、ソート用のカラム A〜Zを全て追加することになる と思います。 ただこのカラムはソート用のものであり、検索条件や出力には使用しません。 ソート用だけのために 50個ものカラムを追加することに抵抗を感じます。 もっと単純にするには、「数字のベクターカラム」を一つ用意して、 そのベクターカラムの位置(インデックス)で、ソートを指定するようにならな いか、ということです。 ruby(rroonga)の書き方で書かせていただきますが、例えば # 0始まりで Hが 7、B が 1、Qが 16 Groonga["Items"].sort(["sort_column[7],sort_column[1],sort_column[16]") というように、「ベクターカラムの n番目」の指定が出来れば、ソート用の カラムは一つで済みます。 気になっているのは、 * 「ベクター」という名称なのだから、配列のように使おうとすること自体が 間違いなのではないか。 * 「ソート条件にベクターカラムが指定されたらエラーを返す」というリクエ ストがそもそも有るので、ベクターをソートに使うこと自体が間違いかも しれない http://redmine.groonga.org/issues/569 * 「複数のソート順を指定する」と書いたが、もし「一つのソート順を指定 する」で、簡単に解決するなら、それにするかもしれない。 これは、上記の例で「H, B, Q の順で優先」と書いたものを、「Hの順で優先」 と、一つしか選べなくする、というものです。そのほうが良い解決があれば、 それも可能です。 * ベクターカラムを使わなくても、他の違う方法が有るかもしれない ということです。 長くなりましたが、どうぞよろしくお願いします。