2009-08-25 4 views
2

特定のテーブルで50以上のカラム(varcharとintの両方)を検索する方法が必要です。私は人々がLuceneとSphinxを推薦しているのを見たことがあるが、私はそれらを使用する方法を知りませんし、MySQLのFull-Textでは16列以上のvarcharとint列を組み合わせることはできません。PHPとMySQLで多数のカラムを検索する

答えて

2

変更がテーブルに反映される前にテーブルが大きく更新されない場合や、LONGTEXTのすべての列を組み合わせた定期的に再生成された派生テーブルを作成し、その全文索引。

+0

問題は、この時点で約65,000行があり、毎週約500個が追加されていることです。 –

+0

500がランダムではなくバッチ内にある場合、バッチの後に派生テーブルを再生成するのは簡単です。しかし、インサートがランダムな時間に来ると仮定すると、週500は平均しても1時間に1時間に過ぎない。何らかの変更が加えられた場合に派生テーブルを再生成し、特別な痛みを感じないような、毎分のcronジョブを実行する可能性があります。 – chaos

+0

MySQL FULLTEXTインデックスを持つ非正規化テーブルの場合+1。 私は最初のオプションとしてsphinxを見ています。 –

0

テーブルをピボット回転させて少しだけ切り取ることを検討してください。すべてのvarcharカラムを取り、データを1つのテーブル "Search_Strings"に格納します。 int型の列に同じ操作を行います。

元のテーブル

id 
always_field1 
always_field2 
varstring1 
... 
varstringx 
int1 
... 
inty 

新しいmain_table(元のテーブルと同じ行数が、非常に少数の列)

id 
always_field1 
always_field2 

Search_Strings(

id (FK to main_table) 
old_column_name 
string_value 

検索結果

id (FK to main_table) 
old_column_name 
int_value 

この設定では、full_extインデックスはstring_valueにのみ必要です。申し訳ありませんが、私はそれらに精通していないので、私はスフィンクスやLuceneと何かを提案することはできません。

+0

Sphinxを使ってこの文字列テーブルのインデックスを作成するには、 "文字列"テーブルに一意のIDキー(シーケンスを考える)があることを確認するだけです。 cf:http://www.postneo.com/2009/02/06/sphinx-search-with-postgresql –