ガイド: 私は PHP の初心者で、会社の業務は複雑ではありませんが、最近全文検索を使用したため、sphinx を使用したいと考えています。
大きく分けて、1:インストール、2設定:3APIの呼び出しです。ここでは主に設定と API の呼び出しについて説明します。インストール手順については以前に別の記事を書きました。理解できない場合は、公式 Web サイトにアクセスしてください。簡単に説明します。
1. 増分インデックスを使用する理由実際、個人的には、データ量が少ないビジネスでは増分インデックスを使用する必要はまったくないと考えています。定期的にインデックスを再生成できれば問題ありません。増分インデックスとは、データ量が比較的少なく、業務処理に影響を与えないように、最後に作成されたインデックス以降に追加されたコンテンツに対して個別のインデックスを生成することです。その後、データの均一性を維持するために、インデックスを定期的にマージする必要があります。定期的に再生されます。
1. 最後に生成されたインデックスの ID を記録する必要があり、テーブルに保存できます。
CREATE TABLEtbl_pre_coursevideo( idint(11) NOT NULL DEFAULT '0', maxidint(11) NOT NULL DEFAULT '0', PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2. 設定ファイル
source mysql { type = mysql sql_host = 127.0.0.1 sql_user = root sql_pass = 123456 sql_db = test sql_port = 3306 sql_query_pre = SETNAMES utf8 sql_query_pre = SETSESSION query_cache_type=OFF #如果这里报错去mysql配置文件修改 sql_query_pre = REPLACEINTO tbl_pre_coursevideo SELECT1, MAX(id) FROM tbl_coursevideo #在刚才新建的表中将当前索引生成的最多id存起来,为增量索引做准备。 sql_query = SELECT id,title,create_time, subtitle,content,type FROM tbl_coursevideo WHERE id <=(SELECT maxid FROM tbl_pre_coursevideo WHERE id=1) #上面这条sql可以分为两部分WHERE 之前,是对数据的查询(根据自己的业务来定)where之后,是对刚才的记录 最大ID 的筛选 sql_attr_uint = id #从SQL读取到的值必须为整数 sql_attr_timestamp = create_time #从SQL读取到的值必须为整数,作为时间属性 sql_field_string = title #字符串字段(可全文搜索,可返回原始文本信息) sql_field_string = subtitle #字符串字段(可全文搜索,可返回原始文本信息) sql_field_string = content #字符串字段(可全文搜索,可返回原始文本信息) } source increment : mysql { sql_query_pre = SETNAMES utf8 sql_query = SELECT id,title,create_time, subtitle,content,type FROMtbl_coursevideo WHERE id >(SELECT maxid FROM tbl_pre_coursevideo WHERE id=1) #这是增量索引的数据源sql。和上面保持一致,唯一的变化,就是where条件之后,这里查询的是大于上次重新生成索引的id,即:刚刚添加的数据 } #index定义 index mysql { source = mysql #对应的source名称 path = /usr/local/coreseek/var/data/mysql#请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/... docinfo = extern mlock = 0morphology = none min_word_len = 1html_strip = 0 #中文分词配置,详情请查看:http://www.coreseek.cn/products-install/coreseek_mmseg/ charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾 #charset_dictpath = etc/ #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/... charset_type = zh_cn.utf-8} index increment : mysql { source=increment path = /usr/local/coreseek/var/data/increment charset_dictpath = /usr/local/mmseg3/etc/ charset_type = zh_cn.utf-8} #全局index定义 indexer { mem_limit = 128M } #searchd服务定义 searchd { listen = 9312read_timeout = 5max_children = 30max_matches = 1000seamless_rotate = 0preopen_indexes = 0unlink_old = 1 pid_file = /usr/local/coreseek/var/log/searchd_mysql.pid #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/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/... }
を使用します:
1. インデックスを生成します (以下のコマンドはすべて私自身のインストール環境のパスです。独自に変更してください) /usr/local/coreseek/bin /indexer -c /usr/local/coreseek/etc/csft.conf --all
#インデックスの生成/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf --all
#生成索引
这时tbl_pre_coursevideo 表里会增加一条记录。存放的就是你内容表中的最大id
2、 /usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft.conf
#开启后台进程
这时候对mysql数据源进行搜索的话其实已经是有数据的。
3、增量索引(内容表新增数据的前提) /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf increment --rotate
このとき、tbl_pre_coursevideo テーブルにレコードが追加されます。保存されるのは、コンテンツ テーブル内の最大の ID です
/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft.conf
#Startバックグラウンドプロセス3. 増分インデックス (コンテンツ テーブルに新しいデータを追加するための前提条件)
この時点で mysql データソースを検索すると、すでにデータが存在します。
/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf increment --rotate code > #実行が完了すると、いくつかの増分インデックス データ、つまりコンテンツ テーブルに追加したばかりのデータの数を生成するように求められます。この時点で、増分インデックスが成功したかどうかを実際にテストできます。 cl->Query($keyword, 'increment '); API を呼び出すときに、増分インデックスを使用して追加したコンテンツをクエリできます<p>4 . インデックスをマージ</p>
<p><br>usr /local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf </p>
–merge mysql increment –rotate<p><br><pre class="brush:php;toolbar:false;">cl->Query(&#39;查询的关键字&#39;, &#39;mysql&#39;); //就能查询出来刚才的新添加的数据,以及以前的数据。</pre><br>5. データの均一性を維持するには、定期的にインデックスを再生成する必要があります<br><pre class="brush:php;toolbar:false;">/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf --all --rotate#--rotate 是不影响服务器搜索时可以添加这个属性</pre></p>1. sphinxapi の後にファイルを呼び出します。 .php のインストールが完了しました。このクラス <p><pre class="brush:php;toolbar:false;">require&#39;sphinxapi.php&#39;;
class Sphinx {private$host=&#39;127.0.0.1&#39;;private$port=9312;private$cl;/*
* @desc 构造函数 初始化sphinx对象
*/public function __construct() {$this->cl =new SphinxClient ();$this->cl->SetServer($this->host, $this->port);$this->cl->SetConnectTimeout(1);$this->cl->SetArrayResult(true);$this->cl->SetMatchMode(SPH_MATCH_EXTENDED2);$this->cl->SetRankingMode(SPH_RANK_WORDCOUNT);
}/*
* @desc 搜索
* @param $page 页数
* @param $pagesize 条数
* @param $keyword 搜索关键字
* @param $source 索引源
*/public function search($keyword, $p, $pagesize) {$page= ($p-1) *10;$this->cl->SetLimits($page, $pagesize); //分页$res=$this->cl->Query($keyword, $source); //sphinx 查询 }
}</pre></p>2. スケジュールされたタスク <p>yum install crontab // </p>crontab -e をインストールし、増分インデックスを定期的に実行し、インデックスをマージし、インデックスを再生成します 🎜🎜 Stay: インデックス ページのマージが成功した場合。ただし、クエリされたデータは常に空なので、構成ファイルを確認できます🎜<pre class="brush:php;toolbar:false;"> path = /usr/local/coreseek/var/data/increment#这里的配置,主索引是否和增量索引这只的路径一样,increment 就是索引的文件名,会在data文件夹下。</pre>🎜これですべてです。不明な点がある場合は、コメントも含めてこのブログをよく読んでください。これらは私が遭遇した問題の一部であり、すべてコメントされています。何かわからないことがあれば、メッセージを残していただければすべて教えます。次回は分詞についてお話します。 🎜りー