coreseek的全文搜索,中文分詞的使用
2019-04-30 16:35 by admin 16 0
PHP + MySql coreseek的全文搜索,中文分詞的使用
windows下的包
鏈接:https://pan.baidu.com/s/1I-egWZlDTp9GwMJnceJ9Qw
提取碼:ew9q
其中 bin 存放索引啓動文件 etc 存放sphinx配置文件 var存放生成的索引文件
先不要着急看裏面文件夾的東西 先準備一張數據表
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for shop_goods
-- ----------------------------
DROP TABLE IF EXISTS shop_goods
;
CREATE TABLE shop_goods
(id
int(11) NOT NULL AUTO_INCREMENT,goods_name
varchar(20) NOT NULL DEFAULT '' COMMENT '訂單id',price
tinyint(4) NOT NULL DEFAULT '0' COMMENT '支付狀態 0:未支付 1:已支付',createtime
int(11) NOT NULL COMMENT '訂單創建時間',
PRIMARY KEY (id
)
) ENGINE=MyISAM AUTO_INCREMENT=56 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of shop_goods
-- ----------------------------
INSERT INTO shop_goods
VALUES ('55', '蘋果8', '127', '0');
接下來配置etc/csft_mysql.conf
源定義
source goods
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass = root
sql_db = shop
sql_port = 3306
#在取數據之前會執行的sql語句
sql_query_pre = SET NAMES utf8
#主查詢 一個數據源中只允許有這一個命令
#第一個字段必須是id(主鍵) 可起別名 例 SELECT goodsid id from
sql_query = SELECT id,goods_name,price,createtime FROM shop_goods #sql_query第一列id需爲整數 #title、content作爲字符串/文本字段,被全文索引
#定義屬性:用於排序 前提是該屬性需要sql_query取出來 可定義多個
sql_attr_uint = price
sql_attr_uint = createtime
}
index定義
index goods
{
#對應的source名稱
source = goods
#索引文件生成的目錄 目錄名最後一級是表示文件名 而不是目錄
path = D:\upupw7\htdocs\coreseek\var\data\goods
docinfo = extern
mlock = 0
morphology = none
#允許的最大單詞是多長
#例如有個詞叫 '測試',這個詞在詞庫中是沒有的,如果設置min_word_len爲2(傳入的詞至少由兩個字組成),
#而詞庫中又沒有'測試' 這個詞,sphinx只好忽略掉
min_word_len = 1
html_strip = 0
#中文分詞配置,詳情請查看:http://www.coreseek.cn/products-install/coreseek_mmseg/
#charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux環境下設置,/符號結尾
#Windows環境下設置,/符號結尾,最好給出絕對路徑,例如:C:/usr/local/coreseek/etc/...
#中文詞庫的目錄 mmseg.ini uni.lib unigram.txt
charset_dictpath = D:\upupw7\htdocs\coreseek\etc
charset_type = zh_cn.utf-8
}
允許使用多大的內存創建索引文件(index.exe)
indexer
{
mem_limit = 128M
}
searchd服務定義
searchd
{
#監聽的端口號
listen = 9312
read_timeout = 5
max_children = 30
#最大返回的記錄數
max_matches = 1000
seamless_rotate = 0
preopen_indexes = 0
unlink_old = 1
###三個文件存放目錄
#請修改爲實際使用的絕對路徑,例如:/usr/local/coreseek/var/...
pid_file = D:\upupw7\htdocs\coreseek\var\log\goods.pid
#請修改爲實際使用的絕對路徑,例如:/usr/local/coreseek/var/...
log = D:\upupw7\htdocs\coreseek\var\log\goods.log
#請修改爲實際使用的絕對路徑,例如:/usr/local/coreseek/var/...
query_log = D:\upupw7\htdocs\coreseek\var\log\query_goods.log
#關閉binlog日誌
binlog_path =
}
配置填寫完之後 生成索引文件
D:\upupw7\htdocs\coreseek\bin\indexer.exe -c D:\upupw7\htdocs\coreseek\etc\csft_mysql.conf goods
##--all創建全部索引
生成索引之後 安裝 searchd.exe 服務
D:\upupw7\htdocs\coreseek\bin\searchd.exe -c D:\upupw7\htdocs\coreseek\etc\csft_mysql.conf --install
如果創建服務失敗 請以管理員身份運行cmd
執行
services.msc
如果searchd總是啓動失敗 調用命令看看是不是配置文件有錯誤
D:\upupw7\htdocs\coreseek\bin\searchd --config D:\upupw7\htdocs\coreseek\etc\csft_mysql.conf
開始測試,簡單地寫一個腳本
<?php
include './api/sphinxapi.php';
$cli = new SphinxClient();
$cli->SetServer('localhost',9312);
$res = $cli->query('蘋果');
echo '<pre>';
var_dump($res);
?>
然後發現返回了結果
array(10) {
["error"]=>
string(0) ""
["warning"]=>
string(0) ""
["status"]=>
int(0)
["fields"]=>
array(1) {
[0]=>
string(10) "goods_name"
}
["attrs"]=>
array(2) {
["price"]=>
int(1)
["createtime"]=>
int(1)
}
["matches"]=>
array(1) {
[55]=>
array(2) {
["weight"]=>
string(1) "1"
["attrs"]=>
array(2) {
["price"]=>
string(3) "127"
["createtime"]=>
string(1) "0"
}
}
}
["total"]=>
string(1) "1"
["total_found"]=>
string(1) "1"
["time"]=>
string(5) "0.004"
["words"]=>
array(1) {
["蘋果"]=>
array(2) {
["docs"]=>
string(1) "1"
["hits"]=>
string(1) "1"
}
}
}
個人博客:https://www.521bug.cn