6

データベースから関連する結果を見つける、自分の Web サイトの検索機能を作成しています。単語の出現回数をカウントする方法を探していますが、単語の両側に単語の境界があることを確認する必要があります (したがって、「リッピング」が必要なときに「トリプル」になってしまうことはありません)。

誰にもアイデアはありますか?


人々は私の質問を誤解しています:

単一の行内でそのような発生回数をカウントするにはどうすればよいですか?

4

9 に答える 9

2

これは、リレーショナル データベースが得意とする類のものではありません。ただし、フルテキスト インデックスを使用できず、InnoDB を使用しているため使用できないと既に述べている場合を除きます。関連する行を選択し、アプリケーション コードでワード カウントを行うことをお勧めします。

于 2010-02-16T17:07:36.497 に答える
1

この倒錯した方法を試すことができます:

SELECT 
(LENGTH(field) - LENGTH(REPLACE(field, 'word', ''))) / LENGTH('word') AS `count`
ORDER BY `count` DESC
  • このクエリは非常に遅くなる可能性があります
  • かなり醜く見える
  • REPLACE() は大文字と小文字を区別します
于 2010-02-16T17:03:00.067 に答える
0

このようなものが機能するはずです:

フィールド名REGEXP'[[:<:]] word [[:>:]]';のテーブルからcount(*)を選択します。

厄介な詳細は、MySQLマニュアルのセクション11.4.2にあります。

于 2008-12-28T05:12:10.513 に答える
0

検索が必要な場合は、Sphinx や Lucene などをお勧めします。Sphinx は (独立した全文インデクサーとして) セットアップと実行がはるかに簡単です。高速に実行され、インデックスを非常に高速に生成します。MyISAM を使用していたとしても、それを使用することをお勧めします。MyISAM の全文索引よりもはるかに強力です。

また、MySQL と (ある程度) 統合することもできます。

于 2010-12-04T23:46:51.570 に答える
0

LIKE や REGEXP などはスケーリングされません (左端のプレフィックスが一致しない限り)。

代わりに、やりたいことにフルテキスト インデックスを使用することを検討してください。

select count(*) from yourtable where match(title, body) against ('some_word');
于 2008-12-28T15:27:50.677 に答える
0

以下のリンクで説明されている手法を使用しました。このメソッドは、 MySQL の 使用lengthと機能を使用します。replace

キーワードの関連性

于 2008-12-29T19:45:17.643 に答える
-3

使用している DBMS によって異なりますが、これを実行できる UDF を作成できるものもあります。

于 2010-08-17T23:55:53.340 に答える