トップ  > メモ一覧  > カテゴリ「全文検索」の絞り込み結果 : 11件

11件中 1 〜 10 表示  1 | 2  次の1件> 最後»

No.3222【引用】全文検索について簡単に調べたメモ

全文検索 について簡単に調べたメモ
さっくり調べる。

概要を知る
読む

http://ja.wikipedia.org/wiki/ 全文検索
Ngram(N-gram)とは何か & 形態素解析との比較

メモ

形態素解析 :

辞書品質により検索落ちも

N-Gram :

ノイズ: 京都 -> 東京都庁
インデックス サイズ肥大化

評価指標

recall (再現率): 検索漏れの少なさ
precision (...

引用元

更新:2010/11/23 02:12 カテゴリ: MySQL  > 全文検索 ▲トップ

No.1824【引用】MySQLInnoDBだけで全文検索

MySQL InnoDBだけで全文検索  

実験エントリです。
予習してみる
「転置 インデックス 」という キーワード で検索して、しばらく勉強してみます。

転置インデックス - Wikipedia
mixi Engineers’ Blog » 転置インデックスを実装しよう
ASCII.jp:悟空、秘剣「転置インデックス」を手に入れる |Googleはなぜ的確に探せるのか?
[を] 転置インデックスによる検索システムを作ってみよう!
転置インデックスで学ぶ検索エンジンの中身アプリ...

引用元

更新:2009/12/06 09:54 カテゴリ: MySQL  > 全文検索 ▲トップ

No.1622 MySQL5.1で全文検索

http://www.developer0000.jp/2007/01/03/1304/

引用元

更新:2009/10/13 17:16 カテゴリ: MySQL  > 全文検索 ▲トップ

No.1570 Hyperestraier

Hyperestraier

出典: Public KFSPedia

CentOS5.3へのインストール

yum install zlib
 
wget libiconv-1.13.1.tar.gz
tar xfvz libiconv-1.13.1.tar.gz
cd libiconv-1.13.1
./configure
make
make install
 
wget qdbm-1.8.77.tar.gz
tar xfvz qdbm-1.8.77.tar.gz
cd xfvz qdbm-1.8.77
./configure
make
make install
 
wget hyperestraier-1.4.13.tar.gz
tar xfvz hyperestraier-1.4.13.tar.gz
cd xfvz hyperestraier-1.4.13
./configure
make
make install
更新:2009/10/06 09:11 カテゴリ: MySQL  > 全文検索 ▲トップ

No.1377 大量データの全文検索

mysqlでのテーブル分割時の検索手法についてお聞きします。
例えば、1億件の日記データをidによって5000万件ずつ別の
テーブル(DiaryTable1, DiaryTable2)に分けるとします。
※分け方は単純に剰余計算。

Insert時はidから剰余計算で格納先テーブルが分かるのでいいのですが、
全日記データから検索を実行したい場合、
DiaryTable1とDiaryTable2からそれぞれselectを実行し、
アプリ側で結果をマージするという処理しかないと思います。
こうすると、データのソートなどアプリ側の処理がかなり複雑化する気がします。
こういった形で複数にテーブル分割を行っていて、
それら全部からどのように(横断検索とでもいうのですかね?)
selectを行い、マージをしているか、いい手法があれば教えて下さい。

ちなみに、環境はMysql5 + php5(adodb) + apacheですが、
環境に依存した回答でなくて構いません。 この質問に言及するmysqlでのテーブル分割時の検索手法についてお聞きします。 例えば、1億件の日記データをidによって5000万件ずつ別の テーブル(DiaryTable1, DiaryTable2)に分けるとします.. を含むブックマークはてなブックマーク - mysqlでのテーブル分割時の検索手法についてお聞きします。 例えば、1億件の日記データをidによって5000万件ずつ別の テーブル(DiaryTable1, DiaryTable2)に分けるとします.. - 人力検索はてなAdd Star

  • osamuaa ウォッチリストに追加
  • 状態:終了
  • 回答数:6 / 95件
  • 回答ポイント:125ポイント
  • 登録:2008-11-22 01:05:35
  • 終了:2008-11-25 12:28:26
  • カテゴリー:コンピュータコンピュータ

1 回答者:goodvn 2008-11-22 04:10:09 満足! 20ポイント Add Star

もし,物理的に同じ DB に居るなら,テーブル同士を結合してしまう手があります.

あと,テンポラリーテーブルを使っていったん合成したテーブルを一時的に作り,そこでソートを掛ける,という手もあります.

http://dev.mysql.com/doc/refman/5.0/en/create-table.html

SQL の書き方によっては,テンポラリーテーブルの作成にかなり時間が掛かる恐れがあります.


しかし,一億件も行があったら,検索はかなり大変なので,MySQL の機能だけでは処理に時間が掛かってしまい実用的では無いでしょうから,外部ツールを使う方法も考えられます.

質問者:osamuaa 2008-11-22 04:51:41

ご回答ありがとうございます。

情報不足で申し訳ございません。

物理的に違うDB(かつ違うサーバー)に分割したテーブルが置いてあります。

よって結合ができないのです。※アプリ側もテーブル分割を見越してjoinはほぼしない設計にはしてあります。

データの検索が頻繁にあるのでテンポラリテーブルをアクセス毎に生成するのは厳しそうです。

また、過大表現で失礼しました。

現在のデータ件数は1千万件ちょっとです。が、早い時期に5千万くらいに達してしまいそうなのです。

先々を見越してアプリ設計をしないとやばいことになりそうです。

とりあえずは5000万件くらいまで達したら2500万件ずつ分割しようと思っております。

それを繰り返していくと、日記データ全体から検索をかけた時にアクセス毎に2〜4回ほどのselectを実行することに

なりますが、主キーでの絞り込みを心がけているので速度はそれなりに出るかなと思っています。

※ちなみにInnoDBです。マスタ・スレーブ構造です。

なるべくは外部ツール?などは使わずMysqlの機能だけでがんばって行きたいと思うところです。

よくmixiとかモバゲとかの巨大システムでのDB分割手法がよく紹介されていますが、

それらを横断的に検索する手法は書かれていないなぁと思うのは私だけでしょうか。

2 回答者:goodvn 2008-11-22 05:52:35 満足! 25ポイント Add Star

mixi でも,初期は検索がほとんどできなくて,検索結果もあまり好ましい表示では無かったですね.最近は改善されたようですけど.

日記の場合,日付という要素がソートで大きいと思うので,垂直分散に置いては,id で分散させず,時系列で分けてはいかがでしょうか.例えば,毎月新しいテーブルを作っていく,など.

これなら,検索時にも検索結果のペイジ単位で,ある程度対象のテーブルが絞れるので,全文検索をしなくても済むかと思います.

私 だったら,日記の IN/OUT のデータとは別に,検索専用のサーバを立てて,ここには検索に最適化したデータを置き,定期的に日記DB からデータを取ってくるような仕組みを作ると思います.検索対象が数千件とかになってくると,単純な文字列一致検索より,インデックスを用いた検索が現実 的でしょうから,検索ツール(例えば Namazu とか)に適したデータ形式に落とし込んでしまう,という形です.

Namazu を使ったとしても,公式サイトに載ってる最大サイズの例で,検索対象88万ファイル,2GB程度ですから,数千万の行を対象とした検索では使えないかもしれません.

http://www.namazu.org/FAQ.html#index-scale

ま た,例えば,「りんご」を「リンゴ」でも検索できるようにしようと思ったら,MySQL の機能だけでは実現できないですよね.kakasi などの外部ツールを頼ることになります.(すべての書き込みに対し,kakasi でひらがな化してインデックス作成.検索ワードも kakasi でひらがな化する,など)

多少は,外部ツールを頼るのも必要かもしれない,と思いました.

PS.

これだけの規模のシステムは,個人的に興味があります.ぜひ見てみたいです(^^;

質問者:osamuaa 2008-11-23 01:20:16

ありがとうございます。

なるほど、外部ツールとを商用ツールと勘違いしておりました。すみません。

idでの分割ではなく、時系列ですか。

しかし時系列だと古くなったテーブルが

だんだん参照されなくなっていく可能性はありませんかね??

検索部分についてですが、多分私もgoodvnさんと思想が一緒だと思います。

Senna+Mecabによる全文検索専用のマスタ・スレーブ構造グループ別途用意。

日記データを更新で、Sennaマスタも更新されるようにしようと思いましたが、

Fulltextのインデックス更新のコストが高いので、キュー処理することに。

別途専用のキューデータベースを立て、Senna用キュー管理テーブルを用意し、(ここにはデータを一意に示すidしか入っていない)

PHPで作成したキュー更新デーモンが定期的にキュー管理テーブルに入ってるIDから実態データを引っ張り出し、

全文検索用にデータを加工(絵文字除去やごちゃごちゃしたことなど)を行ってから、

適宜Senna専用データベースを更新するという実装にしました。

全文検索時はSenna専用データベースから"match against"で一回検索→

取得した結果のIDを元に、分割されたテーブルの所在を示すマップから格納先DBを取得→

そのDBに対してwhere in (id,id,id)でみたいな感じで最終的に必要な日記データを取得。

みたいな感じです。idは主キーなので検索速度は件数が膨大でも早いです。

このように、全文検索時はそれなりに手間かからずいいのですが、

例えば日記の状態を示すフラグ(あいまいですみません)が1であるデータを

引っ張る必要がある時、分割されたテーブルすべてにSQLを発行し、

結果を取得。それらの結果からある値でソートを行う場合などは

アプリ側で結果配列を廻しまくる処理が入ってしまっているため、

ちょぃ自分のDB側設計ミスったかと思っております。。

もうちょっと頭冷やして考えてみます。

>PS.

>これだけの規模のシステムは,個人的に興味があります.ぜひ見てみたいです(^^;

本当ですか、是非一度お茶でも(^^)

3 回答者:pahoo 2008-11-22 10:04:56 満足! 20ポイント Add Star

ご懸念の通り、TABLEを分割している影響がアプリケーション側に及ぶのは好ましいことではありません。

TABLEが2つに分かれているだけならいいのですが、状況に応じて3つ、4つ‥‥に分かれる可能性があるなら、DBMSの負荷は低下するかもしれませんが、その分、アプリケーション側の負荷が増します。


検索速度を向上させたいなどの負荷分散が目的であるなら、MySQL Cluster を利用するのが妥当です。

これであれば、アプリケーション側はTABLEが分散しているかどうかを認識する必要もなく、ふつうにMySQLに接続するだけで(じつはNDB Cluster Engine に接続している)済みます。

質問者:osamuaa 2008-11-23 05:21:18

ご回答ありがとうございます。

MySQL Clusterですね、マスタ・スレーブ構造より、

管理が難しそうだと思い、検討からはずしていました。調査してみます。

しかし、データが巨大な故、ひとつのテーブルを二つやみっつに分割するのであり、

それらを別ホストに置くことにより負荷を下げているのですが、

Clusterだと全データノードで分割されたテーブルを持つ必要があると思われます。

そうなると結局テーブル1とテーブル2にselectかけて結果を受け取って、マージしてっていう処理は

同じように発生しますよね??

4 回答者:kaijikaiji 2008-11-22 10:35:30 満足! 20ポイント Add Starosamuaa

分割したDBとは別に、統合したDBを用意するというのはどうでしょうか?

ユーザが日記データを更新したときには分割したDBが更新されるので、定期的にバッチ処理で分割したDBと統合したDBの同期をとります。全文検索のときは統合したDBから検索します。

同期がとれるまでは全文検索は最新の状態で検索は出来ませんが、それは仕方ないということで。

質問者:osamuaa 2008-11-25 12:26:59

ご回答ありがとうございます。

ご提案通り、全文検索に関しては統合されたDBを用意してあります。

5 回答者:b-wind 2008-11-22 10:53:09 満足! 20ポイント Add Star

トランザクションが無くてもいいなら、 MERGE テーブル使う。

MySQL :: MySQL 4.1 リファレンスマニュアル :: 7.2 MERGE テーブル

無ければだめなら、UNION 使う。

MySQL :: MySQL 4.1 リファレンスマニュアル :: 6.4.1.2 UNION 構文


それ以外だとアプリの方で何とかするしかないねぇ。

質問者:osamuaa 2008-11-23 04:55:56

ご回答ありがとうございます。

mergeテーブルはInnoDBでは使用できなそうです・・。

UNIONに関しては、テーブル分割(DBもホストも物理的に別)なので使用できなそうです・・。

6 回答者:b-wind 2008-11-23 13:13:34 満足! 20ポイント Add Star

mergeテーブルはInnoDBでは使用できなそうです・・。

UNIONに関しては、テーブル分割(DBもホストも物理的に別)なので使用できなそうです・・。

そうでしょうね。

パーティショニング手法によって対処するケースではレプリケーションも無意味です。

(Master/Slave型, MySQL Cluster とも)

全日記データから検索を実行したい場合

検索用のインデックスと格納されたDBを指し示すテーブルを別途用意するぐらいですかねぇ。

リアルタイム性を多少なりとも犠牲にすれば、の話になりますが。

どちらにせよアプリでの対応は(ラッパー関数・クラスを用意するにせよ)対応は必要かと。

引用元

更新:2009/08/25 17:50 カテゴリ: MySQL  > 全文検索 ▲トップ

No.1376 MySQL5.1環境の全文検索





日本語環境、というかマルチバイト環境で使うためのポイントはただひとつ。

MySQL5.0.xまでであれば、Tritonnを使う。
MySQL5.1.xであれば、プラグインを使う。

基本はそれだけ。
設定がちゃんとできていればインデックスが正しく全文検索に対応した形でできるので、最初の構文が日本語環境でも正しく動く。


あえて言うなら、検索専用のスレーブDBのある環境で使ったほうが賢いかも。
SQLログ見ているとMagentoはかなりDBをたたくので軟弱なDBサーバだと悲鳴を上げる可能性大。

Full-Text Parser PluginsでMecabを使った全文検索  Full-Text Parser PluginsでMecabを使った全文検索 - Sleepless geek in Seattle を含むブックマーク はてなブックマーク -  Full-Text Parser PluginsでMecabを使った全文検索 - Sleepless geek in Seattle  Full-Text Parser PluginsでMecabを使った全文検索 - Sleepless geek in Seattle のブックマークコメントAdd Star

mysql5.1にテキスト解析プラグインとしてMeCabを組み込んでみる」を参考にして、MySQL5.1から導入されたFull-Text Parser PluginsでMecabを使って日本語全文検索を試してみた。

  • MecabRPM作成&インストール

適当なsrc.rpm をダウンロードしてインストールする。

# wget ftp://rpmfind.net/linux/fedora/development/source/SRPMS/mecab-0.96-2.fc9.1.src.rpm
# wget ftp://rpmfind.net/linux/fedora/development/source/SRPMS/mecab-ipadic-2.7.0.20070801-1.fc8.src.rpm
# rpm -ivh mecab-0.96-2.fc9.1.src.rpm mecab-ipadic-2.7.0.20070801-1.fc8.src.rpm

RPMをビルドしてインストールする。

# cd /usr/src/redhat/SPECS/
# rpmbuild  -bb ./mecab.spec
# cd /usr/src/redhat/RPMS/i386/
# rpm -ivh mecab-0.96-2.1.i386.rpm  mecab-devel-0.96-2.1.i386.rpm
# cd /usr/src/redhat/SPECS/
# rpmbuild -bb mecab-ipadic.spec
# cd /usr/src/redhat/RPMS/i386/
# rpm -ivh mecab-ipadic-2.7.0.20070801-1.i386.rpm
  • MySQL5.1のソースに付属している、フルテキストパーサー プラグインサンプルソースを以下のように編集。(plugin/fulltext/plugin_example.c)

mysql5.1にテキスト解析プラグインとしてMeCabを組み込んでみる」をそのまんま適用しております。

/* Copyright (C) 2006 MySQL AB

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; version 2 of the License.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA */

#include <stdlib.h>
#include <ctype.h>
#include <mysql/plugin.h>
#include <mecab.h>

#if !defined(__attribute__) && (defined(__cplusplus) || !defined(__GNUC__)  || __GNUC__ == 2 && __GNUC_MINOR__ < 8)
#define __attribute__(A)
#endif

static long number_of_calls= 0; /* for SHOW STATUS, see below */

/*
  Simple full-text parser plugin that acts as a replacement for the
  built-in full-text parser:
  - All non-whitespace characters are significant and are interpreted as
   "word characters."
  - Whitespace characters are space, tab, CR, LF.
  - There is no minimum word length.  Non-whitespace sequences of one
    character or longer are words.
  - Stopwords are used in non-boolean mode, not used in boolean mode.
*/

/*
  simple_parser interface functions:

  Plugin declaration functions:
  - simple_parser_plugin_init()
  - simple_parser_plugin_deinit()

  Parser descriptor functions:
  - simple_parser_parse()
  - simple_parser_init()
  - simple_parser_deinit()
*/


/*
  Initialize the parser plugin at server start or plugin installation.

  SYNOPSIS
    simple_parser_plugin_init()

  DESCRIPTION
    Does nothing.

  RETURN VALUE
    0                    success
    1                    failure (cannot happen)
*/

static int simple_parser_plugin_init(void *arg __attribute__((unused)))
{
  return(0);
}


/*
  Terminate the parser plugin at server shutdown or plugin deinstallation.

  SYNOPSIS
    simple_parser_plugin_deinit()
    Does nothing.

  RETURN VALUE
    0                    success
    1                    failure (cannot happen)

*/

static int simple_parser_plugin_deinit(void *arg __attribute__((unused)))
{
  return(0);
}


/*
  Initialize the parser on the first use in the query

  SYNOPSIS
    simple_parser_init()

  DESCRIPTION
    Does nothing.

  RETURN VALUE
    0                    success
    1                    failure (cannot happen)
*/

static int simple_parser_init(MYSQL_FTPARSER_PARAM *param
                              __attribute__((unused)))
{
  return(0);
}


/*
  Terminate the parser at the end of the query

  SYNOPSIS
    simple_parser_deinit()

  DESCRIPTION
    Does nothing.

  RETURN VALUE
    0                    success
    1                    failure (cannot happen)
*/

static int simple_parser_deinit(MYSQL_FTPARSER_PARAM *param
                                __attribute__((unused)))
{
  return(0);
}


/*
  Pass a word back to the server.

  SYNOPSIS
    add_word()
      param              parsing context of the plugin
      word               a word
      len                word length

  DESCRIPTION
    Fill in boolean metadata for the word (if parsing in boolean mode)
    and pass the word to the server.  The server adds the word to
    a full-text index when parsing for indexing, or adds the word to
    the list of search terms when parsing a search string.
*/

static void add_word(MYSQL_FTPARSER_PARAM *param, char *word, size_t len)
{
  MYSQL_FTPARSER_BOOLEAN_INFO bool_info=
    { FT_TOKEN_WORD, 0, 0, 0, 0, ' ', 0 };

  param->mysql_add_word(param, word, len, &bool_info);
}

/*
  Parse a document or a search query.

  SYNOPSIS
    simple_parser_parse()
      param              parsing context

  DESCRIPTION
    This is the main plugin function which is called to parse
    a document or a search query. The call mode is set in
    param->mode.  This function simply splits the text into words
    and passes every word to the MySQL full-text indexing engine.
*/

static int simple_parser_parse(MYSQL_FTPARSER_PARAM *param)
{
  number_of_calls++;
  
  mecab_t *mecab;
  mecab_node_t *node;
  
  mecab = mecab_new(0, 0);
  node = mecab_sparse_tonode2(mecab, param->doc, param->length);
  for(; node; node = node->next) {
      if (node->stat == MECAB_BOS_NODE || node->stat == MECAB_EOS_NODE) {
          continue;
      }
      add_word(param, node->surface, node->length);
  }
  mecab_destroy(mecab);
  return(0);
}


/*
  Plugin type-specific descriptor
*/

static struct st_mysql_ftparser simple_parser_descriptor=
{
  MYSQL_FTPARSER_INTERFACE_VERSION, /* interface version      */
  simple_parser_parse,              /* parsing function       */
  simple_parser_init,               /* parser init function   */
  simple_parser_deinit              /* parser deinit function */
};

/*
  Plugin status variables for SHOW STATUS
*/

static struct st_mysql_show_var simple_status[]=
{
  {"static",     (char *)"just a static text",     SHOW_CHAR},
  {"called",     (char *)&number_of_calls, SHOW_LONG},
  {0,0,0}
};

/*
  Plugin system variables.
*/

static long     sysvar_one_value;
static char     *sysvar_two_value;

static MYSQL_SYSVAR_LONG(simple_sysvar_one, sysvar_one_value,
  PLUGIN_VAR_RQCMDARG,
  "Simple fulltext parser example system variable number one. Give a number.",
  NULL, NULL, 77L, 7L, 777L, 0);

static MYSQL_SYSVAR_STR(simple_sysvar_two, sysvar_two_value,
  PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC,
  "Simple fulltext parser example system variable number two. Give a string.",
  NULL, NULL, "simple sysvar two default");

static MYSQL_THDVAR_LONG(simple_thdvar_one,
  PLUGIN_VAR_RQCMDARG,
  "Simple fulltext parser example thread variable number one. Give a number.",
  NULL, NULL, 88L, 8L, 888L, 0);

static MYSQL_THDVAR_STR(simple_thdvar_two,
  PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC,
  "Simple fulltext parser example thread variable number two. Give a string.",
  NULL, NULL, "simple thdvar two default");

static struct st_mysql_sys_var* simple_system_variables[]= {
  MYSQL_SYSVAR(simple_sysvar_one),
  MYSQL_SYSVAR(simple_sysvar_two),
  MYSQL_SYSVAR(simple_thdvar_one),
  MYSQL_SYSVAR(simple_thdvar_two),
  NULL
};

/*
  Plugin library descriptor
*/

mysql_declare_plugin(ftexample)
{
  MYSQL_FTPARSER_PLUGIN,      /* type                            */
  &simple_parser_descriptor,  /* descriptor                      */
  "simple_parser",            /* name                            */
  "MySQL AB",                 /* author                          */
  "Simple Full-Text Parser",  /* description                     */
  PLUGIN_LICENSE_GPL,
  simple_parser_plugin_init,  /* init function (when loaded)     */
  simple_parser_plugin_deinit,/* deinit function (when unloaded) */
  0x0001,                     /* version                         */
  simple_status,              /* status variables                */
  simple_system_variables,    /* system variables                */
  NULL
}
mysql_declare_plugin_end;

コンパイル

# gcc -Wall -DMYSQL_DYNAMIC_PLUGIN -shared -fPIC `mecab-config --cflags` `mecab-config --libs` -o plugin_example.so plugin_example.c
# cp plugin_example.so /usr/lib/mysql/.
mysql> install plugin simple_parser soname 'plugin_example.so';
mysql> show plugin;
  • テスト
mysql> CREATE TABLE t ( id integer auto_increment, c text, FULLTEXT INDEX (c) WITH PARSER simple_parser, primary key(id)
) ENGINE=MyISAM DEFAULT CHARSET=Latin1;
mysql> INSERT INTO t SET c = '本日は晴天なり。';
mysql> INSERT INTO t SET c = '本日は曇天なり。';
mysql> INSERT INTO t SET c = '本日は快晴なり。';
mysql> SELECT * FROM t WHERE match(c) against('曇天' in boolean mode );
+----+--------------------------+
| id | c                        |
+----+--------------------------+
|  2 | 本日は曇天なり。 |
+----+--------------------------+
1 row in set (0.01 sec)

できた。

  • 備考

テーブルをutf8 で作成すると、うまくマッチしない。

mysql> CREATE TABLE t ( id integer auto_increment, c text, FULLTEXT INDEX (c) WITH PARSER simple_parser, primary key(id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

なぜか、どれもマッチしてしまう。

mysql> INSERT INTO t SET c = '本日は晴天なり。';
mysql> INSERT INTO t SET c = '本日は曇天なり。';
mysql> INSERT INTO t SET c = '本日は快晴なり。';
mysql> SELECT * FROM t WHERE match(c) against('曇天' in boolean mode );
+----+--------------------------+
| id | c                        |
+----+--------------------------+
|  1 | 本日は晴天なり。 |
|  2 | 本日は曇天なり。 |
|  3 | 本日は快晴なり。 |
+----+--------------------------+
3 rows in set (0.01 sec)

JOEJOE 2008/03/20 01:22 こんばんは、参考にさせてもらいました。

問題があります、mecabで分かち書きすると
MATCH(C) AGAINST(’+本日 +晴天’) という検索が内部で
’+’ ’本日’ ’+’ ’晴天’ と細切れにされてしまい検索の演算子としての働きをしていません。

plugin_example.c の add_word()の終わりに
#ifdef DEBUG
fputs(”’”, stderr);
fwrite(word, len, 1, stderr);
fputs(”’¥n”, stderr);
# endif

と付加すれば、mysql/var/{$hostname}.err というファイルに分割された結果が出力されます。

既定では OR検索になるようなので +が付加できないと絞込みが出来ません。

simple_parser_parse()内でそのような処理をしないとだめっぽいですね。

JOEJOE 2008/03/20 10:46 と、思ってソースを見てみたら勘違いでした。
add_word()の
MYSQL_FTPARSER_BOOLEAN_INFO bool_info=
{ FT_TOKEN_WORD, 0, 0, 0, 0, ’ ’, 0 };
の2番目の引数 int yesno に 0以上の値を入れれば ’+’(=and)の動作をするようです。

ORやGROUPの対応をするには parserをキチンと書かないと
ダメなようで...

yoshifumi1975yoshifumi1975 2008/03/20 12:23 引数の意味など そのあたりまったく調べていないので助かります。サンキューです。今度 試してみます。

JOEJOE 2008/03/20 22:38 あと、simple_parser_parse()の MYSQL_FTPARSER_PARAM構造体の modeが query時と更新時で違う値が入ってくるので、パース処理を分けることは出来そうです。
更新時には ’+’とか’-’とか’()’を解釈する必要はないですしね。

mecabパースすると空白が喰われてしまうなぁ。
mecabに食わせる前に、何か処理をしておいたほうがよさ毛ですね。

自分はブログの記事を食わせるために HTMLタグをカットする簡単な関数を通してます。

駄文すんません






引用元

更新:2009/08/25 17:49 カテゴリ: MySQL  > 全文検索 ▲トップ

No.1366 全文検索参考サイト


q.hatena.ne.jp/1227283533

引用元

 
更新:2009/08/25 16:46 カテゴリ: MySQL  > 全文検索 ▲トップ

No.1360 全文検索概論

全文検索概論
    手法
        MySQL組み込み
            Senna
                アプリの改修不要
        アプリ対応
    方法
        手法
            MySQLで
                FULLTEXT
                    概要
                        MySQLに標準搭載されている全文検索インデックスのこと
                        MySQL単体で完結する全文検索の仕組み
                    使用にあたっての制約
                        MyISAM型のみ
                        対象文章は単語ごとにデリミタ文字 [ ,.] で区切られている必要あり
                            日本語はそのままでは検索できません
                        v4.1.1 以上であれば、sjis/ujis/utf8 どれでもOK
                    ポイント
                        日本語のデリミタ区切りさえどうにかすれば、日本語でもFULLTEXTが使える模様。
                    押さえておくべき挙動・仕様
                        全レコードの50%以上が該当する検索語は除外される
                        4文字未満の検索語は無視される
                            /etc/my.cnf で設定変更可
                        stop words リストにある検索語は無視される
                        ' とか + とかは無視される
                        FULLTEXTインデックスがあると INSERT/UPDATE 処理が遅くなる
                        UTF8ならば文字のゆらぎを吸収してくれる
                            create文で「default charset utf8 collate utf8_unicode_ci」の指定した時のみ
                    全文検索 - 2種類の特殊モード
                        1.  QUERY EXPANSION MODE
                        2. BOOLEAN MODE
                全文検索ソリューション組み込み
                    Senna(toritonn)
                        概要
                            MySQL組み込み
                            組み込んだ後、独自のSQL文で検索
                        利点
                            アプリの改修不要
                        疑問点
                            symfonyでどう対応するのか?
                    groonga
                        転置索引は圧縮されてファイルに格納され、
                        参考
                            <http://d.hatena.ne.jp/tasukuchan/20090220/groonga_test_release>
            アプリで
                Senna
                    参考
                        symfonyとの絡み
                            <http://www.ganchiku.com/2008/02/symfony_fulltext_search_with_senna.html>
                HyperEstraier(EstraierPure)
                    N-gram方式
                        デフォルト
                    mecab
                        OK
        全文検索ソリューション
        分析ソリューション
            形態素解析 (わかち書き)
                mecab
                Chasen
            Ngram
                # データの INSERT/UPDATE 時に文章をNgram化させる必要あり
                # 検索をかける際も、検索語をNgram化させる必要あり
                # 検索結果が近似値ソートされない

引用元

更新:2009/08/22 13:41 カテゴリ: MySQL  > 全文検索 ▲トップ

No.1322 MySQL+Torittonインストール&dagger;

MySQL+Toritton インストール

 

構成

  • Mecab 0.97
  • Senna 1.1.4
  • MySQL 5.0.67
  • Tritonn 1.0.12

 

確認

1) インストールされているモジュールを確認

$ yum list installed | grep mysql

インストールされていた場合は削除する

$ sudo /etc/init.d/mysqld stop
$ sudo yum remove mysql mysql-devel mysql-server

2) apache 関連がインストールされているか確認

$ yum list installed | grep apr
$ yum list installed | grep apr-util

インストールされていなかった場合はインストールする

試してないけど、これかな。

$ sudo yum install appr
$ sudo yum install apr-util

3) mysql ユーザが存在するか確認

$ sudo cut -d: -f1 /etc/passwd

ユーザが存在した場合は mysql ユーザのグループの確認

$ id mysql

ユーザが存在しなかった場合は作成する

$ sudo groupadd mysql
$ sudo useradd -g mysql mysql

 

インストールに必要なモジュールをインストール

環境にあわせて適当にインストールしてください。

$ sudo yum install ncurses-devel
$ sudo yum install libtool
$ sudo yum install libtool-ltdl
$ sudo yum install libtool-ltdl-devel

$ sudo yum install readline-devel
$ sudo yum install libxslt-devel
$ sudo yum install libxml2-devel

$ sudo yum install gcc-c++
$ sudo yum install gcc-java
$ sudo yum install gcc-objc
$ sudo yum install gcc4
$ sudo yum install gcc4-c++
$ sudo yum install autoconf
$ sudo yum install libpng-devel
$ sudo yum install libjpeg-devel
$ sudo yum install libmcrypt-devel
$ sudo yum install ImageMagick-devel
$ sudo yum install automake
$ sudo yum install bison

 

Mecab インストール

インストール

$ cd /usr/local/src
$ wget http://nchc.dl.sourceforge.net/sourceforge/mecab/mecab-0.97.tar.gz
$ tar zxvf mecab-0.97.tar.gz
$ cd mecab-0.97
$ ./configure --prefix=/usr/local/mecab --with-charset=utf8
$ make
$ sudo make install

共有ライブラリに追加

ファイルの修正

mecab.conf を新たに作成し「/usr/local/mecab/lib」を記述する。

$ sudo vim /etc/ld.so.conf.d/mecab.conf

/usr/local/mecab/lib

ldconfig 更新

$ sudo ldconfig

確認

$ ldconfig -p | grep 'mecab'

 

Mecab の辞書インストール

$ cd /usr/local/src
$ wget http://nchc.dl.sourceforge.net/sourceforge/mecab/mecab-ipadic-2.7.0-20070801.tar.gz
$ tar zxvf mecab-ipadic-2.7.0-20070801.tar.gz
$ cd mecab-ipadic-2.7.0-20070801
$ ./configure --prefix=/usr/local/mecab --with-charset=utf8 --with-mecab-config=/usr/local/mecab/bin/mecab-config 
$ make 
$ sudo make install

 

Senna インストール

インストール

$ cd /usr/local/src
$ wget http://globalbase.dl.sourceforge.jp/senna/33763/senna-1.1.4.tar.gz
$ tar zxvf senna-1.1.4.tar.gz
$ cd senna-1.1.4
$ ./configure --prefix=/usr/local/senna --with-charset=utf8 --with-mecab --with-mecab-config=/usr/local/mecab/bin/mecab-config
$ make
$ sudo make install

共有ライブラリに追加

ファイルの修正

senna.conf を新たに作成し「/usr/local/senna/lib」を記述する。

$ sudo vim /etc/ld.so.conf.d/senna.conf

/usr/local/senna/lib

ldconfig 更新

$ sudo ldconfig

確認

$ ldconfig -p | grep 'senna'

 

MySQL + Toritonn インストール

インストール

$ cd /usr/local/src
$ wget http://osdn.dl.sourceforge.jp/tritonn/36449/tritonn-1.0.12-mysql-5.0.67.tar.gz
$ tar zxvf tritonn-1.0.12-mysql-5.0.67.tar.gz
$ cd tritonn-1.0.12-mysql-5.0.67

$ ./configure
--prefix=/usr/local/mysql 
--libexecdir=/usr/local/mysql/bin 
--localstatedir=/home/mysql/data 
--enable-thread-safe-client 
--enable-assembler 
--enable-local-infile 
--with-charset=utf8 
--with-collation=utf8_general_ci 
--with-extra-charsets=complex 
--with-pic 
--with-pthread 
--with-mysqld-user=mysql 
--with-mecab=/usr/local/mecab 
--with-senna=/usr/local/senna
$ make
$ sudo make install

 

設定

共有ライブラリに追加

ファイルの修正

mysql.conf を新たに作成し「/usr/local/mysql/lib/mysql」を記述する。

$ sudo vim /etc/ld.so.conf.d/mysql.conf

/usr/local/mysql/lib/mysql

ldconfig 更新

$ sudo ldconfig

確認

$ ldconfig -p | grep 'mysql'

環境変数の設定(パスを通す)

ファイルを修正する

環境にあわせて適当に設定してください。

$ su - username
$ vim .bash_profile
  • 変更前
    PATH=$PATH:$HOME/bin
    
    export PATH
  • 変更後
    # MySQL
    MYSQL_HOME=/usr/local/mysql
     
    PATH=$PATH:$HOME/bin:$MYSQL_HOME/bin:
    
    export MYSQL_HOME PATH
    export MANPATH="$MANPATH":$MYSQL_HOME/man

設定を反映させる

$ source .bash_profile

 

MySQL 設定

1) データベースファイルを置く場所を作成

/usr/local/mysql/data にデータファイルを置く場合は、以下のようにフォルダを作成する。

$ sudo mkdir -p /usr/local/mysql/data
$ sudo chown -R mysql /usr/local/mysql/data
$ sudo chgrp -R mysql /usr/local/mysql

今回は、/home/mysql/data に置くので、以下のようにフォルダを作成する。

$ su - mysql
$ mkdir data

2) 設定ファイル(my.cnf)の作成

サンプルがあるのでコピーして使う。

$ sudo cp /usr/local/src/tritonn-1.0.12-mysql-5.0.67/support-files/my-medium.cnf /etc/my.cnf

3) 設定ファイル(my.cnf)の修正

以下のように my.cnf を修正する。

$ vim /etc/my.cnf

skip-character-set-client-handshake を追加

[mysqld] に skip-character-set-client-handshake を追加する。
skip-character-set-client-handshake は、サーバーの文字コード設定をクライアントでもそのまま使う設定。

[mysqld]
skip-character-set-client-handshake

skip-networking をコメントアウト

skip-networking をコメントアウトする。
skip-networking は、ネットワーク (TCP/IP) 経由の接続を許可しない。

変更前
#skip-networking
 ↓
変更後
skip-networking

4) DB 初期化

$ sudo /usr/local/mysql/bin/mysql_install_db --user=mysql

 

自動起動

MySQL 起動のためのファイルコピー

$ sudo cp /usr/local/src/tritonn-1.0.12-mysql-5.0.67/support-files/mysql.server /etc/init.d/mysqld
$ sudo chmod 755 /etc/init.d/mysqld

MySQL 自動起動設定に mysqld を追加

$ sudo chkconfig --add mysqld

MySQL 自動起動設定

$ sudo chkconfig mysqld on

MySQL 自動起動設定の確認

ランレベル 2, 3, 4, 5 になっていればよい。

$ chkconfig --list mysqld

 

MySQL 起動

起動

$ sudo /etc/init.d/mysqld start

起動確認

停止

$ sudo /etc/init.d/mysqld stop

 

パスワード設定

mysql ユーザのパスワード設定

$ sudo passwd mysql

MySQL の root ユーザのパスワード設定

$ sudo mysqladmin -u root password パスワード

 

DB にアクセスしたらはじめに行うこと

匿名ユーザの削除

$ mysql -u root -p
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| mysql              | 
| test               | 
+--------------------+
3 rows in set (0.00 sec)
mysql> use mysql;
Database changed
mysql> SHOW TABLES;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              | 
| db                        | 
| func                      | 
| help_category             | 
| help_keyword              | 
| help_relation             | 
| help_topic                | 
| host                      | 
| proc                      | 
| procs_priv                | 
| tables_priv               | 
| time_zone                 | 
| time_zone_leap_second     | 
| time_zone_name            | 
| time_zone_transition      | 
| time_zone_transition_type | 
| user                      | 
+---------------------------+
17 rows in set (0.00 sec)
mysql> DELETE FROM user WHERE User='';
Query OK, 2 rows affected (0.00 sec)
mysql> DELETE FROM db WHERE User='';
Query OK, 2 rows affected (0.00 sec)
mysql> FLUSH  PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

 

動作確認

Senna 動作確認

参考:http://qwik.jp/senna/check_install.html

Tritonn 動作確認

参考:http://qwik.jp/tritonn/userguide.html

 

ログの設定

mysql のログは、data フォルダに保管するのが一般的?どうなんだろ?
CentOS だし、ためしに syslog に出力してみる。

フォルダ作成

$ sudo mkdir /var/log/mysql
$ sudo chown mysql:mysql /var/log/mysql

設定ファイル(my.conf)の修正

[mysqld] にログを出力する場所を指定する。
[mysqladmin] にログローテートする時に mysqladmin flush-logs を実行するユーザを記述しておく。

$ sudo vim /etc/my.cnf

[mysqld]
log = /var/log/mysql/mysql.log
log-error = /var/log/mysql/mysql-error.log
log-slow-queries = /var/log/mysql/mysql-slow.log
[mysqladmin]
password = パスワード
user= root

 

ログローテートの設定

設定ファイルのコピー

サンプルがあるのでコピーして使う。

$ sudo cp /usr/local/src/tritonn-1.0.12-mysql-5.0.67/support-files/mysql-log-rotate /etc/logrotate.d/mysql

ファイルの修正

mysqladmin の場所を確認する。
環境にあわせて適当に設定してください。

$ sudo vim /etc/logrotate.d/mysql
  • 変更前
    /home/mysql/data/mysqld.log {
            # create 600 mysql mysql
            notifempty
            daily
            rotate 3
            missingok
            compress
        postrotate
            # just if mysqld is really running
            if test -x /usr/local/mysql/bin/mysqladmin && \
               /usr/local/mysql/bin/mysqladmin ping &>/dev/null
            then
               /usr/local/mysql/bin/mysqladmin flush-logs
            fi
        endscript
    }
  • 変更後
    /var/log/mysql/*log {
    	    # create 600 mysql mysql
    	    notifempty
    	    daily
    	    rotate 4 #4回分のログを保存する
    	    missingok
    	    compress
    	postrotate
    	    # just if mysqld is really running
    	    if test -x /usr/local/mysql5/bin/mysqladmin && \
    		/usr/local/mysql/bin/mysqladmin ping &>/dev/null
    	    then
    		/usr/local/mysql/bin/mysqladmin flush-logs
    	    fi
    	endscript
    }

記述に間違いがないか確認

$ logrotate -d /etc/logrotate.d/mysql 

MySQL の再起動

$ sudo /etc/rc.d/init.d/mysqld restart

ローテートの確認

ローテートを実行する

$ sudo /usr/sbin/logrotate /etc/logrotate.conf

ローテートが実行されたかどうか確認

$ sudo vim /var/lib/logrotate.status

ファイルが作成されているかも確認する

$ ls -la /var/log/mysql

一週間後にローテートが実行されるかどうか確認

logrotate.status を一週間前のものに書き換える

$ sudo vim /var/lib/logrotate.status

変更前
"/var/log/mysql/mysql-error.log" 2009-4-26
"/var/log/mysql/mysql-slow.log" 2009-4-26
"/var/log/mysql/mysql.log" 2009-4-26
 ↓
変更後
"/var/log/mysql/mysql-error.log" 2009-4-19
"/var/log/mysql/mysql-slow.log" 2009-4-19
"/var/log/mysql/mysql.log" 2009-4-19

ローテートを実行する

$ sudo /usr/sbin/logrotate /etc/logrotate.conf

ローテートが実行されたかどうか確認

$ sudo vim /var/lib/logrotate.status

ファイルが作成されているかも確認する

$ ls -la /var/log/mysql

 

引用元

更新:2009/08/14 10:29 カテゴリ: MySQL  > 全文検索 ▲トップ

No.1317 Tritonn(MySQL+Senna)+Mecab+Apahce+PHP(withAPC&amp;imagick)をCentOS5にインストールする

Tritonn(MySQL+Senna)+Mecab+Apahce+PHP(with APC & imagick)をCentOS5にインストールする

バージョン等の最終更新:2009-02-11

PHPからTritonn(MySQL+Senna)を使うためのセットアップに若干ハマったので、メモ的にエントリー。

Tritonn(MySQL+Senna)だ けでPHPからMySQLに接続するときは、Tritonnをソースからインストールしなくてはなりません。というのも、Tritonnプロジェクトでは コンパイル済みのrpmをリリースしていますが、このrpmにはmysql-devel的なライブラリが同梱されていません。Tritonnだけをrpm からインストールした場合、PHPの./configure時にlibmysqlclient.soが見つからず、PHPのインストールを完了させること ができないのです。(参考:tritonをphpから使う : 社長にはなれない僕だから。

mysql-develなパッケージをyumなどでインストールしてもよいのですが、可能な限りシンプルに済ませたいところです。

というわけで、Tritonnをソースからインストールする手順は以下の通りです。環境は CentOS5.2(32bit)をVMware Server(Win32)のゲストOSとして動作させています。

  1. 既存の重複するモジュールを削除する(あれば)
  2. MySQL用のユーザーグループをユーザーを作成する
  3. コンパイルに必要なもろもろのモジュールをyumでインストールする
  4. Mecabをソースからインストール
  5. Sennaをソースからインストール
  6. Tritonnをソースからインストール
  7. Apacheをソースからインストール
  8. PHPをソースからインストール
  9. imagickをソースからインストール

以下、コマンドライン上からの作業ログです。環境によってはこのままでインストールできないこともありますので、ご了承ください。

重複するモジュールを削除する

sudo yum remove mysql php httpd apr apr-util

MySQL用のユーザーグループとユーザーを作成する

sudo /usr/sbin/groupadd mysql
sudo /usr/sbin/useradd -g mysql mysql

各バイナリのインストールに必要なもろもろのモジュールを、yumでインストールする

sudo yum -y install \
gcc-c++ gcc-java gcc-objc gcc4 gcc4-c++ autoconf \
libpng-devel libjpeg-devel libmcrypt-devel ImageMagick-devel \
libtool automake bison ncurses-devel libtool-ltdl libtool-ltdl-devel \
( http://blog.livedoor.jp/k1LoW/archives/53521855.html を参考に、
libtool-ltdl libtool-tdl-devel を加えました )

作業用にユーザーディレクトリに srcディレクトリを作成

mkdir ~/src

Mecabをソースからインストール

cd ~/src
wget http://nchc.dl.sourceforge.net/sourceforge/mecab/mecab-0.97.tar.gz
#  ( http://mecab.sourceforge.net/ から最新版の取得を推奨します )
tar zxvf mecab-0.97.tar.gz
cd mecab-0.97
./configure --prefix=/usr --with-charset=utf8 && make && sudo make install

Mecab-IPA辞書をソースからインストール

cd ~/src
wget http://nchc.dl.sourceforge.net/sourceforge/mecab/mecab-ipadic-2.7.0-20070801.tar.gz
#  ( http://mecab.sourceforge.net/ から最新版の取得を推奨します )
tar zxvf mecab-ipadic-2.7.0-20070801.tar.gz
cd mecab-ipadic-2.7.0-20070801
./configure --prefix=/usr --with-charset=utf8 && make && sudo make install

Sennaをソースからインストール

cd ~/src
wget http://globalbase.dl.sourceforge.jp/senna/33763/senna-1.1.4.tar.gz
#  ( http://qwik.jp/senna/Download.html から最新版の取得を推奨します )
tar zxvf senna-1.1.4.tar.gz
cd senna-1.1.4
./configure --prefix=/usr && make && sudo make install
#  ( ここでコンパイラがメモリを200MB以上確保するときがあるので、
#    ゲストOSの場合は最低でも512MBは割り当てたほうがよいです )

Tritonnをソースからインストール

cd ~/src
wget http://osdn.dl.sourceforge.jp/tritonn/36449/tritonn-1.0.12-mysql-5.0.67.tar.gz
#  ( http://qwik.jp/tritonn/download.html から最新版の取得を推奨します )
tar zxvf tritonn-1.0.12-mysql-5.0.67.tar.gz
cd tritonn-1.0.12-mysql-5.0.67
CC='gcc' CXX='gcc' \
./configure \
'--prefix=/usr/local/mysql' \
'--localstatedir=/usr/local/mysql/data' \
'--libexecdir=/usr/local/mysql/bin' \
'--enable-thread-safe-client' \
'--enable-local-infile' \
'--enable-assembler' \
'--with-pic' \
'--with-fast-mutexes' \
'--with-client-ldflags=-static' \
'--with-mysqld-ldflags=-static' \
'--with-zlib-dir=bundled' \
'--with-big-tables' \
'--with-yassl' \
'--with-readline' \
'--with-archive-storage-engine' \
'--with-blackhole-storage-engine' \
'--with-ndbcluster' \
'--with-csv-storage-engine' \
'--with-example-storage-engine' \
'--with-federated-storage-engine' \
'--with-innodb' \
'--with-extra-charsets=complex' \
'--with-senna' '--with-mecab' && make && sudo make install

#  ( コンパイルオプションは http://qwik.jp/tritonn/howtobuild.html と、
#    http://d.hatena.ne.jp/mir/20070803/p2 を参考にしました )

サービスへ「mysqld」として登録

sudo cp ./support-files/mysql.server /etc/init.d/mysqld
sudo chmod 755 /etc/init.d/mysqld
sudo /sbin/chkconfig --add mysqld

my.cnfを修正

sudo vi /etc/my.cnf
#datadir=の値を書き換える
-datadir=/var/lib/mysql
+datadir=/usr/local/mysql/data

DBを初期化し、ユーザーとグループを適切なものに変更

sudo /usr/local/mysql/bin/mysql_install_db --user=mysql
#  ( /usr/local/mysql/data 内にDBのファイルが初期化されます )
sudo chown -R mysql /usr/local/mysql/data
sudo chgrp -R mysql /usr/local/mysql

MySQL(Tritonn)をserviceから起動する

sudo /sbin/service mysqld start
Starting MySQL.                                            [  OK  ]

Apache (apr, apr-util, httpd) をソースからインストール

cd ~/src
wget http://www.meisei-u.ac.jp/mirror/apache/httpd/httpd-2.2.11.tar.gz
tar zxvf httpd-2.2.11.tar.gz

aprのインストール

cd ~/src/httpd-2.2.11/srclib/apr/
./configure  && make && sudo make install

apr-utilのインストール

cd ~/src/httpd-2.2.11/srclib/apr-util
./configure --with-apr=/usr/local/apr && make && sudo make install

httpdのインストール

cd ~/src/httpd-2.2.11
./configure \
--enable-so \
--enable-mods-shared=all \
--enable-modules=all \
--enable-ssl \
--with-ssl \
--with-mpm=prefork \
--with-apr=/usr/local/apr/ && make && sudo make install

Apacheをサービスへ「httpd」として登録

sudo cp build/rpm/httpd.init /etc/init.d/httpd
sudo chmod 755 /etc/init.d/httpd
sudo /sbin/chkconfig --add httpd

/etc/init.d/httpd を修正する

sudo vi /etc/init.d/httpd

# (以下の3行を修正)

- apachectl=/usr/sbin/apachectl
+ apachectl=/usr/local/apache2/bin/apachectl
- httpd=${HTTPD-/usr/sbin/httpd}
+ httpd=${HTTPD-/usr/local/apache2/bin/httpd]
-      CONFFILE=/etc/httpd/conf/httpd.conf
+      CONFFILE=/usr/local/apache2/conf/httpd.conf

PHPをソースからインストール

sudo yum install -y \
libmcrypt-devel libxml2 libxml2-devel libpng libpng-devel \
libjpeg libjpeg-devel curl curl-devel libtidy libtidy-devel
cd ~/src
wget http://jp.php.net/get/php-5.2.9.tar.gz/from/this/mirror
#  ( http://www.php.net/downloads.php から最新版の取得を推奨します )
tar zxvf php-5.2.9.tar.gz
cd ~/src/php-5.2.9
'./configure' \
'--prefix=/usr/local' \
'--with-mysql=/usr/local/mysql' \
'--with-pdo-mysql=/usr/local/mysql' \
'--with-apxs2=/usr/local/apache2/bin/apxs' \
'--enable-mbstring' \
'--enable-mbregex' \
'--with-jpeg-dir' \
'--enable-ftp' \
'--enable-exif' \
'--enable-sockets' \
'--with-openssl' \
'--with-zlib' \
'--with-gd' \
'--with-curl' \
'--enable-zend-multibyte' \
'--enable-pcntl' \
'--with-mcrypt' \
'--with-tidy' && make && sudo make install

APCをソースからインストール

cd ~/src
wget http://pecl.php.net/get/APC-3.1.2.tgz
#  ( http://pecl.php.net/package/APC から最新版の取得を推奨します )
tar zxvf APC-3.1.2.tgz
cd ~/src/APC-3.1.2
phpize && ./configure --with-apc && make && sudo make install

imagickをソースからインストール

cd ~/src
wget http://pecl.php.net/get/imagick-2.2.2.tgz
#  ( http://pecl.php.net/package/imagick から最新版の取得を推奨します )
tar zxvf imagick-2.2.2.tgz
cd ~/src/imagick-2.2.2
phpize && ./configure --with-imagick && make && sudo make install

php.iniの作成

sudo vi /usr/local/lib/php.ini
# 以下を追記
extension=apc.so
extension=imagick.so

httpdの起動

$ sudo /sbin/service httpd start
Starting httpd:                                            [  OK  ]

あとは http://qwik.jp/tritonn/basictutorial.html を見てチュートリアルを試すなり、PHPから接続してみるなりして動作確認をしてください。

引用元

更新:2009/08/13 20:42 カテゴリ: MySQL  > 全文検索 ▲トップ
11件中 1 〜 10 表示  1 | 2  次の1件> 最後»

FuelPHP

Mac

フロントエンド開発

web開発

プロマネ

マネタイズ

プレゼン

webサービス運用

webサービス

Linux

サーバ管理

MySQL

ソース・開発

svn・git

PHP

HTML・CSS

JavaScript

ツール, ライブラリ

ビジネス

テンプレート

負荷・チューニング

Windows

メール

メール・手紙文例

CodeIgniter

オブジェクト指向

UI・フロントエンド

cloud

マークアップ・テキスト

Flash

デザイン

DBその他

Ruby

PostgreSQL

ユーティリティ・ソフト

Firefox

ハードウェア

Google

symfony

OpenPNE全般

OpenPNE2

Hack(賢コツ)

OpenPNE3

リンク

個人開発

その他

未確認

KVS

ubuntu

Android

負荷試験

オープンソース

社会

便利ツール

マネー

Twig

食品宅配

WEB設計

オーディオ

一般常識

アプリ開発

Python

サイトマップ

うずら技術ブログ

たませんSNS

rss2.0