2011-02-09 2 views
1

私は現在MySqlを使用しており、ブール検索を実行する必要があるいくつかのテーブルがあります。私のテーブルがInnodbタイプであることを考えると、これを行うためのより良い方法の1つがSphinxまたはLuceneを使用することであることが判明しました。私は、これらを使用して疑問を持っている私のクエリは次のような形式のものであり、MySql全文またはスフィンクスまたはLuceneまたは何か他のものはありますか?

Select count(*) as cnt, DATE_FORMAT(CONVERT_TZ(wrdTrk.createdOnGMTDate,'+00:00',:zone),'%Y-%m-%d') as dat from t_twitter_tracking wrdTrk where wrdTrk.word like (:word) and wrdTrk.createdOnGMTDate between :stDate and :endDate group by dat; 

クエリは、ログインしているユーザーのタイムゾーンに変換する必要が日付フィールドを持ち、その後フィールドが行うために使用しますグループ化する。

私がSphinx/luceneに移行すると、上記のクエリと同様の結果が得られます。スフィンクスの初心者ですが、どちらを使うべきですか、それとも良いものがありますか?

実際にgroupbyと検索すると「wrdTrk.word like(:word)」が検索クエリの主な部分であり、ユーザーエクスペリエンスを高めるためにboolean検索に移動する必要があります。私のデータベースは約23652826行あり、dbはInnodbベースで、MySql全文検索は機能しません。

よろしく 盧

答えて

0

はい。スフィンクスはこれを行うことができます。 LIKE (:word)が何をするのか分かりませんが、スフィンクス検索で@word "exactword"のようなクエリを実行できます。

0

あなただけの数を必要とするだけなので、あなたがインデックスに必要なデータが適切と意志結果

+0

あなたはこれについてより多くの光を当てることができます。 – sesmic

+0

luceneを使用する場合は、まずzend luceneを使用して検索データのインデックスを作成してから検索を実行してください。 – Ankur

0

を持って、私はあなたがMySQLを使用して維持するために、それは良いだろうと信じています。 パフォーマンスの問題が発生した場合は、explain()を使用してインデックスを改善し、クエリを改善することをお勧めします。 フルテキスト検索がユースケースの大部分を占める場合にのみ、Sphinx/Solrの使用に移行する必要があります。

Full Text Search Engine versus DBMSを読むと、より包括的な回答が得られます。

+0

実際にgroupbyと検索すると、 'wrdTrk.word like(:word)'は私の大部分ですクエリと私はユーザーの経験を向上させるブール検索に移動する必要があります。私のデータベースは約23652826行あり、dbはInnodbベースで、MySql全文検索は機能しません。 – sesmic

0

あなたのカウントをメタテーブルに保存し、更新しておいてください。独自のカウントを維持するmyisamを使用してください。 mongodbも独自のカウントを維持します。 memcacheにカウントをキャッシュします。カウントを知る必要があるたびにカウントすることは、リソースの愚かな使用です。

関連する問題