sphinx容器使用小記

  1. 鏡像拉取

docker pull sunfjun/coreseek
2. 下載sphinx代碼
3. 啓動容器

創建相關目錄

mkdir -p /data/sphinx/conf /data/sphinx/data /data/sphinx/log

準備配置文件,將源碼裏etc下的配置文件cp出來
cp sphinx-min.conf.dist /data/sphinx/conf
修改配置文件

sql_host        = 192.168.99.158
    sql_user        = root
    sql_pass        = 123456
    sql_db          = test
    sql_port        = 3306  # optional, default is 3306

另外在mysql數據庫創建test數據庫,將源碼裏的example.sql導入創建相關的demo表和數據,sql_host是你自己的mysql連接,賬號也爲自己的數據庫連接
運行容器命令

docker run -idt  --name=sphinx -v /data/sphinx/conf:/usr/local/etc/sphinx -v /data/sphinx/data:/var/data -v /data/sphinx/log:/var/log -p 9312:9312 sunfjun/coreseek

如果沒有提供sphinx.conf容器起不來,會報錯
4. php測試
因爲容器sphinx服務端版本低的原因,下載較高版本的sphinx使用sphinxapi.php時會報客戶端版本較低,

Deprecated: DEPRECATED: Do not call this method or, even better, use SphinxQL instead of an API in /data/soft/sphinx-2.2.11-release/api/sphinxapi.php on line 771
Query failed: searchd error: client version is higher than daemon version (client is v.1.30, daemon is v.1.25)

適合版本下載地址,下載該版本sphinx-2.0.10-release.tar.gz
5. 使用相關介紹

配置文件數據源中

sql_query_info      = SELECT * FROM documents WHERE id=$id

配置了這一句,在服務端使用search group進行索引查找會顯示取出來的內容,而在客戶端是不影響的,可以指定到索引文件中查找search -i test1 group

sql_attr_uint = group_id
sql_attr_timestamp = date_added
sql_attr_string = title
作爲過濾條件可隨數據返回
6. 配置
數據配置

source src1
{
        type                    = mysql

        sql_host                = 192.168.99.158
        sql_user                = root
        sql_pass                = 123456
        sql_db                  = test
        sql_port                = 3306  # optional, default is 3306

        sql_query_pre = REPLACE INTO sph_counter SELECT 1, MAX(id) FROM documents
        sql_query               = \
                SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \
                FROM documents where id <= (select max_doc_id from sph_counter where counter_id=1)

        sql_attr_uint           = group_id
        sql_attr_timestamp      = date_added
        sql_attr_string         = title
#       sql_field_string        = title
#        sql_field_string        = content

        sql_query_info      = SELECT * FROM documents WHERE id=$id
        sql_joined_field  = tags from query; SELECT docid, CONCAT('tag',tagid) FROM tags ORDER BY docid ASC
}

source delta_src:src1
{
        sql_query_pre   = set names utf8
        sql_query       = select id,group_id,unix_timestamp(date_added) as date_added,title,content \
 from documents where id>(select max_doc_id from sph_counter where counter_id=1)
}

index test1
{
        source                  = src1
        path                    = /var/data/test1
}
index delta:test1
{
        source  = delta_src
        path    = /var/data/delta
}

增量查詢,建一個表sph_counter,只包含一條記錄,記錄test1索引表時最大記錄數。寫兩個crontab,一個是晚上凌晨執行來更新test1的索引文件indexer test1 --rotate,另一個是時間 比較短執行的crontab,可根據數據隨時間變化的頻率來定時間執行indexer delta --rotate

使用sql_joined_field聯表字段後可以使用聯表的字段來搜索,這裏可以是php test.php tag43

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章