Sphinx在windows下安裝使用

來源:互聯網
上載者:User

Sphinx 在 windows 下安裝使用

前一陣子嘗試使用了一下 Sphinx ,一個能夠被各種語言 (PHP/Python/Ruby/etc) 方便調用的全文檢索索引系統。網上的資料大多是在 linux 環境下的安裝使用,當然,作為生產環境很有必要部署在 *nix 環境下,作為學習測試,還是 windows 環境比較方便些。

本文旨在提供一種便捷的方式讓 Sphinx 在 windows 下安裝配置以支援中文全文檢索索引,配置部分在 linux 下通用。

一、關於 Sphinx

Sphinx 是一個在 GPLv2 下發布的一個全文檢索索引引擎,商業授權(例如 , 嵌入到其他程式中)需要聯絡作者( Sphinxsearch.com )以獲得商業授權。

一般而言, Sphinx 是一個獨立的搜尋引擎,意圖為其他應用提供高速、低空間佔用、高結果相關度的全文檢索搜尋功能。 Sphinx 可以非常容易的與 SQL 資料庫和指令碼語言整合。

當前系統內建 MySQL 和 PostgreSQL 資料庫資料來源的支援,也支援從標準輸入讀取特定格式的 XML 資料。通過修改原始碼,使用者可以自行增加新的資料來源(例如:其他類型的 DBMS 的原生支援)。

搜尋 API 支援 PHP 、 Python 、 Perl 、 Rudy 和 Java ,並且也可以用作 MySQL 儲存引擎。搜尋 API 非常簡單,可以在若干個小時之 內移植到新的語言上。

Sphinx 特性:

•高速的建立索引 ( 在當代 CPU 上,峰值效能可達到 10MB/ 秒 );
•高效能的搜尋 ( 在 2–4GB 的文本資料上,平均每次檢索回應時間小於 0.1 秒 );
•可處理海量資料 ( 目前已知可以處理超過 100GB 的文本資料 , 在單一 CPU 的系統上可處理 100M 文檔 );
•提供了優秀的相關度演算法,基於短語相似性和統計( BM25 )的複合 Ranking 方法 ;
•支援分布式搜尋 ;
•提供檔案的摘錄產生 ;
•可作為 MySQL 的儲存引擎提供搜尋服務 ;
•支援布爾、短語、詞語相似性等多種檢索模式 ;
•文檔支援多個全文檢索索引欄位 ( 最大不超過 32 個 );
•文檔支援多個額外的屬性資訊 ( 例如:分組資訊,時間戳記等 );
•停止詞查詢 ;
•支援單一位元組編碼和 UTF-8 編碼 ;
•原生的 MySQL 支援 ( 同時支援 MyISAM 和 InnoDB);
•原生的 PostgreSQL 支援 .
二、 Sphinx 在 windows 上的安裝

1. 直接在 http://www.sphinxsearch.com/downloads.html 找 到最新的 windows 版本,我這裡下的是 Win32 release binaries with MySQL support ,下載後解壓在 D:/sphinx 目錄下;

2. 在 D:/sphinx/ 下建立一個 data 目錄用來存放索引檔案, 一個 log 目錄方記錄檔,複製 D:/sphinx/sphinx.conf.in 到 D:/sphinx/bin/sphinx.conf (注意修改檔案 名);

3. 修改 D:/sphinx/bin/sphinx.conf ,我這裡 列出需要修改的幾個:

type           = mysql # 資料來源,我這裡是mysql
sql_host       = localhost # 資料庫伺服器
sql_user       = root # 資料庫使用者名稱
sql_pass       = '' # 資料庫密碼
sql_db         = test # 資料庫
sql_port       = 3306 # 資料庫連接埠

sql_query_pre      = SET NAMES utf8 # 去掉此行前面的注釋,如果你的資料庫是uft8 編碼的

index test1
{
# 放索引的目錄
  path      = D:/sphinx/data/
# 編碼
  charset_type     = utf-8
  #  指定utf-8 的編碼錶
  charset_table     = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
  # 簡單分詞,只支援0 和1 ,如果要搜尋中文,請指定為1
  ngram_len       = 1
# 需要分詞的字元,如果要搜尋中文,去掉前面的注釋
  ngram_chars      = U+3000..U+2FA1F
}

# 搜尋服務需要修改的部分
searchd
{
  # 日誌
  log        = D:/sphinx/log/searchd.log

# PID file, searchd process ID file name
  pid_file      = D:/sphinx/log/searchd.pid

# windows 下啟動searchd 服務一定要注釋掉這個
  # seamless_rotate     = 1
}

4. 匯入測試資料

sql 檔案在 D:/sphinx/example.sql

C:/Program Files/MySQL/MySQL Server 5.0/bin>mysql -uroot test<d:/sphinx/example.sql

5. 建立索引

D:/sphinx/bin>indexer.exe test1 ( 備忘 :test1 為 sphinx.conf 的 index test1() )
Sphinx 0.9.8-release (r1533)
Copyright (c) 2001-2008, Andrew Aksyonoff

using config file ‘./sphinx.conf’…
indexing index ‘test1′…
collected 4 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 4 docs, 193 bytes
total 0.101 sec, 1916.30 bytes/sec, 39.72 docs/sec

D:/sphinx/bin>

6. 搜尋 ’test’ 試試

D:/sphinx/bin>search.exe test1

顯示結果如下

using config file ‘./sphinx.conf’…
index ‘test1′: query ‘test ‘: returned 3 matches of 3 total in 0.000 sec

displaying matches:
1. document=1, weight=2, group_id=1, date_added=Wed Nov 26 14:58:59 2008
id=1
group_id=1
group_id2=5
date_added=2008-11-26 14:58:59
title=test one
content=this is my test document number one. also checking search within
phrases.
2. document=2, weight=2, group_id=1, date_added=Wed Nov 26 14:58:59 2008
id=2
group_id=1
group_id2=6
date_added=2008-11-26 14:58:59
title=test two
content=this is my test document number two
3. document=4, weight=1, group_id=2, date_added=Wed Nov 26 14:58:59 2008
id=4
group_id=2
group_id2=8
date_added=2008-11-26 14:58:59
title=doc number four
content=this is to test groups

words:
1. ‘test’: 3 documents, 5 hits
D:/sphinx/bin>

 

6. 測試中文搜尋

修改 test 資料庫中 documents 資料表,

UPDATE `test`.`documents` SET `title` = ‘ 測試中文 ’, `content` = ‘this is my test document number two ,應該搜的到吧 ’ WHERE `documents`.`id` = 2;

重建索引:

D:/sphinx/bin>indexer.exe test1

搜尋 ’ 中文 ’ 試試:

D:/sphinx/bin>search.exe 中文
Sphinx 0.9.8-release (r1533)
Copyright (c) 2001-2008, Andrew Aksyonoff

using config file ‘./sphinx.conf’…
index ‘test1′: query ‘ 中文 ‘: returned 0 matches of 0 total in 0.000 sec

words:
D:/sphinx/bin>

貌似沒有搜到,這是因為 windows 命令列中的編碼是 gbk ,當然搜不出來。我們可以用程式試試,在 D:/sphinx/api 下建立一個 foo.php 的檔案,注意 utf-8 編碼

<?php
require ’sphinxapi.php’;
$s = new SphinxClient();
$s->SetServer(’localhost’,9312);
$result = $s->Query(’ 中文 ’);
var_dump($result);
?>

啟動 Sphinx searchd 服務

D:/sphinx/bin>searchd.exe
Sphinx 0.9.8-release (r1533)
Copyright (c) 2001-2008, Andrew Aksyonoff

WARNING: forcing –console mode on Windows
using config file ‘./sphinx.conf’…
creating server socket on 0.0.0.0:9312
accepting connections

 

執行 PHP 查詢:

訪問 http://www.test.com/sphinx/api/foo.php ( 自己配置的虛擬機器主機 )

 

使用 CORESEEK 分詞
1 、下載 http://www.coreseek.cn/news/5/89/

2 、安裝系統依賴的軟體包

系統的基礎組件需要如下的軟體包:

   - Active Python 2.5 ( http://www.activestate.com/Products/activepython/ )
   - MySQL_Python 1.2.2 (http://sourceforge.net/project/showfiles.php?group_id=22307 ) 驗證 可以不裝

安裝完前面兩個組件後,系統可以運行,但是需要手工修改設定檔。

安裝配置介面需要的軟體包:

- gtk-dev 2.12.9 (http://sourceforge.net/project/showfiles.php?group_id=98754 ) 驗證可以不裝
    - pycairo 1.4.12 (http://ftp.acc.umu.se/pub/GNOME/binaries/win32/pycairo/1.4/ )
    - pygobject 2.14.1 (http://ftp.acc.umu.se/pub/GNOME/binaries/win32/pygobject/2.14/ )
    - pygtk 2.12.1 (http://ftp.acc.umu.se/pub/GNOME/binaries/win32/pygtk/2.12 ) )

如果您下載的是完整版,前面提到的全部檔案應該能在preq 子目錄中找到。
安裝前面提到的全部軟體包(注意:必須先安裝Python 和gtk)

注意: 必須是Active Python ,Python 官方的版本缺少系統需要的Win32 擴充支援,將導致系統無法工作。

注意: 完成本步後,必須重新啟動您的電腦。

3 、解壓 csft 到你認為的目錄

4 、csft 檔案內配與 sphinx 的內容大致相同 ( 配置詳細見:sphinx+mysql (1) , (2) )

5 、建立詞典檔案

/bin/mmseg -u /data/unigram.txt    # 詞庫是動態,指定目錄就可以

·   把產生的檔案改名為uni.lib ,

6 、匯入sample.sql 資料庫

7 、建立索引 index.exe --all   (詳情見 sphinx + mysql(1) )

以下分支說明如下

---------------------------------------------------------------

A :

8 、安裝SPHINXSE FOR MYSQL

http://www.sphinxsearch.com/downloads/mysql-5.0.45-sphinxse-0.9.8-win32.zip

下載後,解壓然後覆蓋MYSQL 目錄,就OK 。 ( 注意mysql 版本必須相同)

進入mysql 運行 show engines; 查看錶的類型是否存在 sphinx

9 、建立Sphinx 儲存引擎表
CREATE TABLE `sphinx` (
`id` int(11) NOT NULL,
`weight` int(11) NOT NULL,
`query` varchar(255) NOT NULL,
`group_id` int(11) NOT NULL,
KEY `Query` (`Query`)
) ENGINE=SPHINX CONNECTION='sphinx://localhost:3312/test1';

與一般mysql 表不同的是ENGINE=SPHINX CONNECTION='sphinx://localhost:3312/test1'; ,這裡表示這個表採用SPHINXSE 引擎,與sphinx 的串連串是'sphinx://localhost:3312/test1 ,test1 是索引名稱
根據sphinx 官方說明,這個表必須至少有三個欄位,欄位起什麼名稱無所謂,但類型的順序必須是integer,integer,varchar ,分別表示記錄標識document ID, 匹配權重weight 與查詢query ,同時document ID 與query 必須建索引。另外這個表還可以建立幾個欄位,這幾個欄位的只能是integer 或TIMESTAMP 類型,欄位是與sphinx 的結果集綁定的,因此欄位的名稱必須與在sphinx.conf 中定義的屬性名稱一致,否則取出來的將是Null 值。

10 、MySQL SphinxSE 全文檢索索引儲存引擎SQL 陳述式使用方法

安裝SphinxSE 儲存引擎後首先需建立一張特殊的指定"ENGINE=SPHINX" 檢索表,如下:

CREATE TABLE ArticleFulltext (
    ID          INTEGER NOT NULL,
    Weight      INTEGER NOT NULL,
    Query      VARCHAR(3072) NOT NULL,
    ...
    INDEX (Query)
) ENGINE=SPHINX CONNECTION="sphinx://localhost:3312/test";

·   其中表名和欄位名可以是任意名稱,但前三個屬性的類型必須為INT 、INT 和VARCHAR 。也可以擁有更多的屬性,類型必須為INT 或TIMESTAMP ,名稱必須與Sphinx 設定檔對應,用於返回檢索結果的更多資訊。

·   建立該表後即可使用如下的SQL 陳述式在MySQL 中進行全文檢索索引:

·   SELECT * FROM ArticleFulltext WHERE Query=' 全文檢索索引條件';

·   查詢返回結果即為全文檢索索引的結果,包括文檔ID 、權重,若ArticleFulltext 表包含了更多屬性還包含命中結果的其它資訊。

·   通過SQL 聯結操作可以很容易的實現融合檢索,如:

·   SELECT ID, Title
FROM Article, ArticleFulltext
WHERE ArticleFulltext.ID = Article.ID and Query = ' 部落格'
AND PublishTime > '2007-03-01' AND ReferCount > 0
ORDER BY Weight * 0.5 + ReferCount * 0.5;

·   上述SQL 陳述式即可檢索出2007 年3 月1 日以來包含' 部落格' 關鍵字且並引用過的文章,且按全文檢索索引權重和引用數綜合計算所得的權重進行排序。

·   由此可見,通過將全文檢索索引系統提供的功能以儲存引擎的形式嵌入到關聯式資料庫MySQL 中可以很方便的提供融合檢索功能,雖然功能限制較多,也不失為一種聰明便捷的方式。

11, 將SPHINX 產生WINDOWS 服務

searchd --install --config "csft.conf"

12. 啟動服務 net start |searchd( 或者其它服務名)

---------------------------------------------------------------

B :

配置sphinx.conf 檔案,支援中文編碼

charset_type = zh_cn.utf-8
charset_dictpath = D:/csft3.1/bin   # 分詞 lib 庫檔案的目錄
min_infix_len = 0

 

 

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/siren0203/archive/2010/05/07/5564082.aspx

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.