2011-10-29 13 views
1

投稿する前に私はたくさん検索しましたが、正確に何を探していたのか分かりませんでした。質問は非常に簡単です。mysqlのテキスト内の単語を検索

私は(私はエンジンとしてMyISAMテーブルを必要とするFULL-TEXT searchを使用することはできません)InnoDBエンジンを使用する必要があり、テーブル内のテキスト(データベースのMySql)をしました。私の目標はのテキストにある単語を検索しています。あなたが簡単に推測できるように、この単語は、スペース、タブ、マークなどで囲むことができ、このテキストの始め、途中、または終わりにすることができます。

私はREGEXP演算子を使用することができますが、私はそれを使用することができますが、私が使用したSQL文は正確には必要ではないので、質問を投稿すると考えました。これは私の実際のSQLです:

SELECT * 
FROM table 
WHERE field REGEXP '[[:space:][:graph:]]+THEWORD[[:space:][:graph:]]+' 

どのように私の目標を達成することができますか?

ありがとうございました。

答えて

2

使用ワード境界マーカー:

SELECT * 
FROM table 
WHERE field REGEXP '[[:<:]]THEWORD[[:>:]]' 

MySQL 5.1 Referenceで見つかった)私はこれを覚えておくよ提案のための

+0

それは良い作品です。どうもありがとうございます。 –

0

実際には、テキストコンテンツ内の単語を検索するためのメカニズムを作成しようとしているようです。これを何度も行う必要がある場合(例:あなたのサイトでリクエストを検索するたびに)、は別のテーブルの単語にインデックスを付けることをお勧めします。(たとえば、単語が1つのテーブル、すべてが一意であるテーブル、内容と単語の間のコネクタ表)。

これにより、特定の単語を含むコンテンツを取得するように設計されたクエリが大幅に高速化されます。ただし、これは長期的な解決策であり、このような検索を何度も実行したい場合や、各検索がアプリケーションの速度に影響を与える場合は、より良いアイデアです。

+0

感謝。とにかく、まず私は私の問題の解決策を見つけるだろう。 –

0

もう1つの方法は、Luceneのような索引付き検索エンジンでデータベース外の単語を索引付けする方法です。私はこれがあなたの質問に直接言及していないことを知っていますが、大きなデータベースを持っている、そして/または並行性の高いコンテキストで使用されている場合は、個々の単語を検索しようとすると大きな問題となります。単語を別のデータベース表に索引付けすることはできますが、重大な制限があります。たとえば、「実行」と「実行」を一致させるために「実行」を検索する場合はどうなりますか? 「メタデータ」と「メタデータ」を一致させるための「メタデータ」の検索を希望する場合はどうでしょうか?インデックス検索エンジンには、ステミングやシノニムなどの機能があり、検索能力に大きな力と柔軟性をもたらすことができます。言い換えれば、クエリとは対照的に、最適化されて検索のためにキャッシュされることは言うまでもありません。

+0

提案していただきありがとうございます。私はLuceneを知っていますが、現時点ではREGEXPなどを使用する必要があります。この場合、Luceneの追加機能が過剰になるように一致を正確に見つける必要があります。 –

関連する問題