萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> 全文索引Sphinx的安裝配置及使用教程

全文索引Sphinx的安裝配置及使用教程

Sphinx是一個基於SQL的全文檢索引擎,可以結合MySQL,PostgreSQL做全文搜索,它可以提供比數據庫本身更專業的搜索功能,使得應用程序更容易實現專業化的全文檢索。

搜索分為兩種:

  1. 對結構化數據搜索:SQL語句對數據庫中存儲的內容進行查詢。

  2. 對非結構化數據搜索:文本,圖片,全文搜索。

 

全文檢索分為兩類:

  1. 順序掃描:如SQL中的LIKE查詢或regexp正則查詢。

  2. 索引掃描:將非結構化數據提取部分(如:詞組)後進行重組,使其機構化,這些提取出的數據即索引。

 

使用索引的全文檢索包括兩個過程:

  1. 索引創建(Index):將內容中的詞組 與 文本的ID提取出來,創建一張索引表。

  2. 搜索索引(Search):將搜索內容拆分成詞組,去索引表中匹配ID,查出文本內容。

  

如何創建索引:

  1. 將需要創建索引的文檔交給分詞組件(Tokenizer);

    分詞組件所做的事:將文檔生成單獨的單詞,去除標點符號,去除停詞(the, a, 的, 是);每種語言的分詞組件都有一個停詞集合,

    經過分詞組件後得到的結果成為詞元。

 

  2. 將得到的詞元(Token)傳給語言處理組件(Linguistic Processer);

    語言處理組件對得到的詞元進行同語言處理:如,英文變為小寫(Lowercase),將單詞縮減為詞根形式,如“cars”到“car”等(stemming),將單詞轉變為詞根形式,如“drove”到“drive”(lemmatization),

 

  3. 將得到的詞(Term)傳給索引組件(Indexer);

    索引組件主要做以下幾件事:利用得到的詞(Term)和文檔ID,創建一個字典,對字典按字母順序排序,合並相同的詞成為文檔倒排(Posting List)鏈表。

 

如何對索引進行搜索:

  1. 輸入查詢語句,提交給Sphinx。

  2. Sphinx對查詢語句進行詞法分析,語法分析及語言處理。

  3. 搜索索引,得到符合語法樹的文檔。

  4. 根據得到的文檔和查詢語句的相關性,對結果排序。

 

Sphinx是SQL Parse Index(查詢詞組索引)縮寫,基於SQL的全文檢索引擎。Coreseek支持中文的全文檢索引擎。

Sphinx的優點:

高速的建立索引(在當代CPU上,可達到10M/秒)

高性能的搜索(在2-4G的文本數據上,平均每次檢索響應時間小於0.1秒)

可處理海量數據(目前已知可以處理超過100GB的文本數據,在單一CPU的系統上可處理100M的文檔);

提供了優秀的相關度算法,基於短語相似度和統計BM2的復合Ranking方法;

支持分布式搜索;

提供文檔片段(摘要以及高亮)生成功能;

可作為MySQL的存儲引擎提供搜索服務;

支持布爾、短語、詞語相似度等多種檢索方式;

文檔支持多個全文檢索字段(最大不超過32個);

 

Sphinx的缺點:

必須要有主鍵

主鍵必須為整形

不負責數據存儲

配置不靈活

 

Sphinx的使用:

1. 下載Sphinx:

wget http://sphinxsearch.com/files/sphinx-2.2.8-release.tar.gz

 

編譯安裝:

cd /public/sphinx-2.2.8

./configure --prefix=/usr/local/sphinx --with-mysql=/usr/local/mysql

(rpm安裝的mysql: ./configure --prefix=/usr/local/sphinx --with-mysql=/usr)

make && make install

 

安裝完畢得到四個目錄:

bin:存放命令,indexer索引組件,searchd進程

etc:配置文檔

var:存放索引表

 

創建數據庫表:

show database;  //查看所有數據庫

create database test;

create table post(

  id int unsigned auto_increment primary key,

  title varchar(255) not null default '',

  content text default NULL

)engine=myisam default charset=utf8;

desc post;  //查看表結構

insert into post(title, content) values("linux", "linux11111");

 

2. 配置Sphinx:

cd /usr/local/sphinx/etc/

cp sphinx.conf.dist sphinx.conf  //備份配置文件,防止改錯

vim sphinx.conf

配置文件結構:

# 主數據源,(main名字可更改)
source main{
  type     = mysql    #數據庫類型
  sql_host  = localhost  #MySQL主機IP
  sql_user  = test     #MySQL用戶名
  sql_pass  =        #MySQL密碼
  sql_db   = test     #MySQL數據庫
  sql_port  = 3306     #MySQL端口
  sql_sock  = /tmp/mysql.sock    #Linux下需要開啟,指定sock文件
  sql_query_pre = SET NAMES utf8   #MySQL檢索編碼
  sql_query_pre = SET SESSION query_cache_type=OFF #關閉緩存
  sql_query = \             #獲取數據的SQL語句
    SELECT id, title, content FROM post
  #sql_attr_uint = group_id      #對排序字段進行注釋, 默認使用sphinx的文檔表,這裡不需要
  #sql_attr_timestamp = date_added  #對排序字段進行注釋
  
}

# 增量數據源, 繼承主數據源
source main throttled : main{
}

# 主索引,(main名字可更改)
index main{
  source  = main
  path   = /usr/local/sphinx/var/data/main
}

# 增量索引
index test1 stemmed : test1{
}

# 分布式索引,distributed index
index dist1{
}

# 實時索引,realtime index
index rt{
}

# 索引器,(調整最小內存到最佳)
indexer{
  mem_limit = 256M  #內存大小限制,默認128M,推薦256M
              #其它用默認即可
}

# 服務進程,(監聽端口號)
searched{
  #全部默認即可,默認端口號就是9312
}

# 公共配置
common{
}

:set nu        //顯示行號,:set nonu取消行號

:311,314s/^/#/g  //注釋增量數據源

:628,632s/^/#/g  //注釋增量索引

:639,696s/^/#/g  //注釋分布式索引

 

3. 創建索引:

創建索引命令:indexer

-c     指定配置文件

--all    對所有索引重新編制索引

--rotate  用於輪換索引,在不停止服務的時候(searchd運行時)增加索引;searchd運行時不加會報錯。

--merge  合並索引,增量索引合並到主索引的時候用

 

生成全部索引: /usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/sphinx.conf --all

或生成指定索引: /usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/sphinx.conf main

 

(1)如果這裡出現報錯:

【ERROR: index 'main': sql_connect: Can't connect to local MySQL server through socket '/tmp/mysql.sock'】

沒找到/tmp/mysql.sock, 通過find / -name mysql.sock -print查找到位置,在配置sphinx.conf裡更改正確。

如:mysql_sock = /var/lib/mysql/mysql.sock 保存退出。

 

(2)繼續創建索引,警告:

【WARNING: Attribute count is 0: switching to none docinfo】

改sphinx.conf裡的docinfo = none就沒有警告了。(http://sphinxsearch.com/docs/current.html#conf-docinfo)

 

創建索引出現如下提示,表示生成成功:

copyright © 萬盛學電腦網 all rights reserved