2011-12-08 12 views
2

携帯電話のモデル番号と携帯電話に関する記事(または単なる行)(PHPまたはCの文字列の形式)を含む辞書(SQLテーブルの形式)があります。私はその記事で取り上げた携帯電話のモデルを見つけたいと思っていますが、私はブルートフォース検索をしたくない、つまり、テキスト内のそれぞれのモデル名を1つずつ検索したくありません。辞書検索

また、私は辞書全体のハッシュテーブルを維持し、次に記事内のすべての作業のハッシュと照合し、衝突を探すこ​​とを考えていました。しかし、辞書が非常に大きいので、このアプローチのメモリオーバーヘッドはあまりにも大きいです。

また、データベースがない場合、つまり、言語スコープ内のすべてのもの、配列形式の辞書、文字列形式のテキストがあります。

+0

タグに「c」があるのはなぜですか? –

+0

私はC言語とPHP言語の両方を知っていて、いずれかのソリューションを探しています。 – Coddy

答えて

1

記事フィールドでFULLTEXTインデックスを使用し、MATCH/AGAINSTで検索を実行する必要があります。

SELECT * FROM your_table MATCH('phonemodel') AGAINST ('article'); 
+0

このアプローチは、文字列が小さい場合、つまり行だけであっても効率的ですか? – Coddy

+0

はい。 MySqlは、FULLTEXTインデックスを格納するための適切なデータ構造を使用し、そのようなデータ構造内での検索は非常に効率的です。 – ioseb

+0

OK ..もしデータベースにすべてのものがあって、データベースがない場合はどうでしょうか。私は質問を更新するつもりです。 – Coddy

1

Inverted index助けてください。リンク:Inverted index

あなたの記事をモデル名のフィルタートークンに分割します。したがって、インデックスを作成することができます。インデックスのキーはモデル名であり、インデックスの値は記事リストです。

場合によっては、モデル名の位置が記事に表示されるような追加情報を追加できます。

0

あなたがCとパフォーマンスを考えているのであれば、あなたが望むものです。記事のすべての単語にトライ(http://en.wikipedia.org/wiki/Trie)を作成することをお勧めします。それは、ハッシュより少し速く、辞書よりもはるかに少ないメモリを消費します。

Cで実装するのは簡単ではありませんが、どこかで準備が整っていることがわかります。

グッドラック(:

0

あなたは、巨大なデータを持っている場合は、それらのいずれかを使用 -

  1. Sphinx
  2. Lucene

トライ/ DAWG(有向非巡回単語グラフ)がありますエレガントなソリューションだけでなく、実装するのが難しい&です。そして、MySQL FULLTEXTの検索は大丈夫ですが、大きなデータの検索はありません。