Sphinx+PHP検索サービス

WBOY
リリース: 2016-06-23 13:17:39
オリジナル
863 人が閲覧しました

自分の映画 Web サイトのリソースが徐々に増加するにつれて、映画リソース検索サービスを追加することが避けられなくなりました。データベース検索を直接操作すると、IO ポート要求が増加し、検索パフォーマンスが低下します。前回のプロジェクトで sphinx を使用する基礎があり、中国語の検索サービスのサポートに加えて、最終的に sphinx ベースの Coreseek 検索サービスを使用することにしました。

ダウンロードとインストールの手順 [Linux 環境でバージョン 4.1 を使用しており、システムは mysql および xml データ ソースをサポートしています]:

  1. coreseek ダウンロード アドレス、coreseek-4.1-beta.tar.gz パッケージをダウンロード

  2. 解凍gz パッケージ、tar zxvf coreseek-4.1-beta.tar.gz

  3. mmseg [中国語単語セグメンテーション パッケージ] をコンパイルしてインストールします

    1. ./bootstrap

    2. ./configure --prefix=/usr /local/mmseg3

      + usr/local/coreseek --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr /local/mmseg3/lib / --with-mysql #with-mmseg-libs は mmseg 中国語単語セグメンテーション パスです
    3. make && make install
  4. 映画 Web サイトの更新サイクルは比較的長く、sphinx はインデックス作成にはメイン インデックス + 増分インデックスの方法を使用し、最後に 2 つのインデックス ファイルをマージします。ここで、独自の検索構成ファイルのデプロイを開始します:
    1. coreseek インストール ディレクトリに etc ファイルを入力し、.conf 構成ファイルを作成または変更します

    2. ソース ソースを構成します

    3. source movie
    4. {
    Type = mysql
sql_host = localhost #mysql データベースホスト

sql_user = root #mysql user

sql_pass = localhost #mysql ユーザーパスワード
    sql_db = movie #movie
  1. sql_port = 3306 # オプション、デフォルトは 3306 です

    sql_query_pre =セット名 utf8

  2. #インクリメンタルインデックスを作成します
  3. sql_query_pre = REPLACE INTO movie_sph_counter SELECT 1, MAX(id) FROM movie

    sql_query = SELECT id, UNIX_TIMESTAMP(cdate) AS date ,id AS movie_id ,name, year, type,status,sync_status FROM movie WHERE id<= ( SELECT max_movie_id From Movie_SPH_COUNTER where counter_id = 1)

    1. #検索戻りフィールド
    2. SQL_ATTR_UINT = Movie_id

      SQL_UINT = Year
      SQL_UINT = TYPE
      SQL_ATTR_UINT = Date
      SQL_ATTR_UINT = Status
      SQL_ATTR_UINT = _STATUS
      SQL_FIELD_STRING = NAME

      SQL_INFO_PRE = SET NAMES UTF8 # コマンドラインでクエリを実行する場合は、正しい文字セットを設定します
      sql_query_info = SELECT * FROM movie WHERE id=$id # コマンドラインでクエリを実行する場合は、データベースから元のデータ情報を読み取ります
      }


      #Incrementalインデックス ソース
      ソース デルタ: 映画

      {

      sql_query_pre = SET NAMES utf8
      sql_query = SELECT id, UNIX_TIMESTAMP(cdate) AS date ,id AS movie_id ,name , year, type ,status,sync_status FROM movie WHERE id>( SELECT max_movie_id FROM movie_sph_counter counter_id=1 )
      sql_query_post_index = REPLACE INTO movie_sph_counter SELECT 1, MAX(id) FROM movie
      }




      構成インデックス
      I #

      1. #インデックス定義
      2. インデックスムービー

        {
        Source = Movie #対応するソース名
        PATH =/usr/Local/Coreseek/VAR/Movie #実際に使用する絶対パスは/usr /localのように変更してください/coreseek/var/...
        docinfo = extern
        mlock = 0
        morphology = none
        min_word_len = 1
        html_strip = 0

        #中国語単語セグメンテーション設定、詳細については、http://www.coreseek.cn を確認してください。 /products-install/coreseek_mmseg/
        charset_dictpath = /usr/local/mmseg/etc/ #BSD および Linux 環境で設定し、/ シンボルで終わる mmseg パス

        charset_type = zh_cn.utf-8 #中国語エンコーディング
        }

        indexデルタ : movie
        {
        ソース = デルタ
        パス = /usr/local/coreseek/var/data/movie_delta #注意! !メインインデックスパスと同じ名前を使用しないでください。 docinfo = extern mlock = 0
        morphology = none
        min_word_len = 1
        html_strip = 0

        _dictpath = /usr/local/mmseg/etc/
        charset_type = zh_cn.utf-8
        }




        検索サービスを設定します

    3. #searchd サービス定義

      searchd
    4. {
        Listen = 9312 #ポート番号、自分で定義できます
      1. read_timeout = 5

        max_children = 30
        max_matches = 1000
        シームレス回転= 0
        preopen_indexes = 0
        unlink_old = 1
        compat_sphinxql_magics=0
        pid_file = /usr/local/coreseek/var/log/searchd_mysql.pid #実際の絶対パスに変更してください (例: /usr/local/core) Seek/var/ ...
        log = /usr/local/coreseek/var/log/searchd_mysql.log #実際の絶対パスに変更してください。例: /usr/local/coreseek/var/...
        query_log = /usr/ local/coreseek/var/log/query_mysql.log #実際の絶対パスに変更してください。例: /usr/local/coreseek/var/...
        Binlog_path = #binlog ログを閉じる
        }




        インデックスを作成するコマンドを実行します: /usr/local/coreseek/bin/indexer -c movie.conf --all

      バックグラウンドで実行されている検索サービスを開始します: /usr/local/coreseek/ bin/searchd -c movie.conf
    5. スケジュールされたタスクを作成し、増分インデックス作成を実行します: /usr/local/coreseek/bin/indexer -c csft_movie.conf delta --rotate
    6. スケジュールされたタスクを作成してマージインデックス: /usr/local/coreseek/bin/indexer -c csft_movie.conf --merge movie delta --merge-dst-range selected 0 0 --rotate
    7. これで、sphinx+mysql に基づく検索サービスが追加されました。次のステップは、sphinxapi.php に基づいて検索インターフェイス コードを開発することです ……
    8. 初めて自分で Sphinx 検索サービスを構築し、最終的に Web サイト検索をテストしましたが、その速度は驚くべきものでした。
    9. ここでシェアしますので、皆さんのお役に立てれば幸いです


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート