Sphinx初探之安裝

来源:http://www.cnblogs.com/similarface/archive/2016/01/15/5133515.html
-Advertisement-
Play Games

在Centos or redhat 安裝Sphinx1.首先安裝依賴包$ yum install postgresql-libs unixODBC2.安裝軟體$ rpm -Uhv sphinx-2.2.1-1.rhel6.x86_64.rpm3.啟動服務$ service searchd start...


 

在Centos or redhat 安裝Sphinx
1.首先安裝依賴包
$ yum install postgresql-libs unixODBC
2.安裝軟體
$ rpm -Uhv sphinx-2.2.1-1.rhel6.x86_64.rpm
3.啟動服務
$ service searchd start

[root@face sphinx-2.2.10]# find / -name sphinx
/var/run/sphinx
/var/log/sphinx
/var/lib/sphinx
/etc/logrotate.d/sphinx
/etc/sphinx
/usr/share/sphinx
/usr/share/sphinx/api/ruby/spec/sphinx
/usr/share/sphinx/api/ruby/lib/sphinx

mysql> #創建測試庫
mysql> create database test;
Query OK, 1 row affected (0.00 sec)
#插入測試數據
mysql -uroot -ppassword test < /usr/share/doc/sphinx-2.2.10/example.sql

mysql> desc tags;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| docid | int(11) | NO   | PRI | NULL    |       |
| tagid | int(11) | NO   | PRI | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)
#表結構
mysql> desc documents;
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| group_id   | int(11)      | NO   |     | NULL    |                |
| group_id2  | int(11)      | NO   |     | NULL    |                |
| date_added | datetime     | NO   |     | NULL    |                |
| title      | varchar(255) | NO   |     | NULL    |                |
| content    | text         | NO   |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)
#表數據
mysql> select * from documents;
+----+----------+-----------+---------------------+-----------------+---------------------------------------------------------------------------+
| id | group_id | group_id2 | date_added          | title           | content                                                                   |
+----+----------+-----------+---------------------+-----------------+---------------------------------------------------------------------------+
|  1 |        1 |         5 | 2016-01-15 14:24:23 | test one        | this is my test document number one. also checking search within phrases. |
|  2 |        1 |         6 | 2016-01-15 14:24:23 | test two        | this is my test document number two                                       |
|  3 |        2 |         7 | 2016-01-15 14:24:23 | another doc     | this is another group                                                     |
|  4 |        2 |         8 | 2016-01-15 14:24:23 | doc number four | this is to test groups                                                    |
+----+----------+-----------+---------------------+-----------------+---------------------------------------------------------------------------+
4 rows in set (0.00 sec)

mysql> select * from tags;
+-------+-------+
| docid | tagid |
+-------+-------+
|     1 |     1 |
|     1 |     3 |
|     1 |     5 |
|     1 |     7 |
|     2 |     2 |
|     2 |     4 |
|     2 |     6 |
|     3 |    15 |
|     4 |     7 |
|     4 |    40 |
+-------+-------+
10 rows in set (0.00 sec)

#sphinx的配置文件
[root@face sphinx]# grep "^$\|^#" -v sphinx.conf
source src1
{
    #資料庫類型 數據來源信息 type
= mysql
    #資料庫的IP sql_host
= localhost #資料庫用戶
     sql_user
= root
    #資料庫密碼 sql_pass
=xxxxxx
#資料庫庫名 sql_db = test
     #預設的配置文件沒有這一句 需要註意 sql_sock
= /tmp/mysql.sock sql_port = 3306 # optional, default is 3306
     #
定義取數據的SQL,第一列ID列必須為唯一的正整數值
     sql_query = SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \
                FROM documents
        sql_attr_uint           = group_id
        sql_attr_timestamp      = date_added
}
index test1
{
    #定義索引的源 source
= src1
#設置生成的索引存放路徑 path
= /var/lib/sphinx/test1 } index testrt {
#實時索引類型 type
= rt rt_mem_limit = 128M path = /var/lib/sphinx/testrt rt_field = title rt_field = content rt_attr_uint = gid }
#定義indexer配置選項 indexer {
     #定義生成索引過程使用索引的限制 mem_limit
= 128M }
##定義searchd守護進程的相關選項 searchd {
     #tcp        0      0 0.0.0.0:9312                0.0.0.0:*                   LISTEN      9289/searchd     listen
= 9312 listen = 9306:mysql41 #進程服務日誌
     log
= /var/log/sphinx/searchd.log
     #查詢日誌 query_log
= /var/log/sphinx/query.log
     #網路客服端請求的讀超時 時間 read_timeout
= 5 #子進程數
max_children
= 30 #進程文件的路徑
pid_file
= /var/run/sphinx/searchd.pid

#啟用無縫seamless輪轉,防止searchd輪轉在需要預取大量數據的索引時停止響應
#也就是說在任何時刻查詢都可用,或者使用舊索引,或者使用新索引

        seamless_rotate         = 1
        preopen_indexes         = 1
        unlink_old              = 1
        workers                 = threads # for RT to work
        binlog_path             = /var/lib/sphinx/
}
[root@face sphinx]# service searchd start
Starting searchd: Sphinx 2.2.10-id64-release (2c212e0)
Copyright (c) 2001-2015, Andrew Aksyonoff
Copyright (c) 2008-2015, Sphinx Technologies Inc (http://sphinxsearch.com)

using config file '/etc/sphinx/sphinx.conf'...
listening on all interfaces, port=9312
listening on all interfaces, port=9306
precaching index 'test1'
WARNING: index 'test1': preload: /var/lib/sphinx/test1.sph is invalid header file (too old index version?); NOT SERVING
precaching index 'testrt'
precached 2 indexes in 0.004 sec
                                                           [  OK  ]
#如果啟動有warning 註意這兒的許可權
[root@face sphinx]# pwd
/var/lib/sphinx
[root@face sphinx]# chown sphinx.sphinx ./ -R
[root@face sphinx]# 
[root@face sphinx]# ll
total 36
-rw-------. 1 sphinx sphinx   8 Jan 15 15:28 binlog.001
-rw-------. 1 sphinx sphinx   0 Jan 15 15:28 binlog.lock
-rw-------. 1 sphinx sphinx  11 Jan 15 15:28 binlog.meta
-rw-r--r--. 1 sphinx sphinx 128 Jan 15 15:32 test1.spa
-rw-r--r--. 1 sphinx sphinx 148 Jan 15 15:32 test1.spd
-rw-r--r--. 1 sphinx sphinx   1 Jan 15 15:32 test1.spe
-rw-r--r--. 1 sphinx sphinx 371 Jan 15 15:32 test1.sph
-rw-r--r--. 1 sphinx sphinx 190 Jan 15 15:32 test1.spi
-rw-r--r--. 1 sphinx sphinx   0 Jan 15 15:32 test1.spk
-rw-r--r--. 1 sphinx sphinx   0 Jan 15 15:32 test1.spm
-rw-r--r--. 1 sphinx sphinx  37 Jan 15 15:32 test1.spp
-rw-r--r--. 1 sphinx sphinx   1 Jan 15 15:32 test1.sps
-rw-------. 1 sphinx sphinx   0 Jan 15 15:28 testrt.lock

#不能有warning 開始的時候
[root@face sphinx]# service searchd restart
Stopping searchd:                                          [  OK  ]
Starting searchd: Sphinx 2.2.10-id64-release (2c212e0)
Copyright (c) 2001-2015, Andrew Aksyonoff
Copyright (c) 2008-2015, Sphinx Technologies Inc (http://sphinxsearch.com)

using config file '/etc/sphinx/sphinx.conf'...
listening on all interfaces, port=9312
listening on all interfaces, port=9306
precaching index 'test1'
precaching index 'testrt'                                   
precached 2 indexes in 0.001 sec
                                                           [  OK  ]
#不+ --rotate有可能起不來
[root@face sphinx]# indexer --all --rotate
Sphinx 2.2.10-id64-release (2c212e0)
Copyright (c) 2001-2015, Andrew Aksyonoff
Copyright (c) 2008-2015, Sphinx Technologies Inc (http://sphinxsearch.com)

using config file '/etc/sphinx/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.003 sec, 58949 bytes/sec, 1221.74 docs/sec
skipping non-plain index 'testrt'...
total 4 reads, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg
total 12 writes, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg
rotating indices: successfully sent SIGHUP to searchd (pid=9289).
#連接server 查看數據狀態
[root@face sphinx]# mysql -h0 -P9306
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 2.2.10-id64-release (2c212e0)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show tables;
+--------+-------+
| Index  | Type  |
+--------+-------+
| test1  | local |
| testrt | rt    |
+--------+-------+
2 rows in set (0.00 sec)

mysql> select * from test1;
+------+----------+------------+
| id   | group_id | date_added |
+------+----------+------------+
|    1 |        1 | 1452839063 |
|    2 |        1 | 1452839063 |
|    3 |        2 | 1452839063 |
|    4 |        2 | 1452839063 |
+------+----------+------------+
4 rows in set (0.00 sec)
mysql> select * from testrt;
Empty set (0.00 sec)

mysql> INSERT INTO testrt VALUES ( 1, 'first record', 'test one', 123 );

Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO testrt VALUES ( 2, 'second record', 'test two', 234 );
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO testrt VALUES ( 3, 'three record', 'three', 334 );
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM testrt;
+------+------+
| id | gid |
+------+------+
| 1 | 123 |
| 2 | 234 |
| 3 | 334 |
+------+------+
3 rows in set (0.00 sec)

mysql> SELECT * FROM testrt WHERE MATCH('test');
+------+------+
| id | gid |
+------+------+
| 1 | 123 |
| 2 | 234 |
+------+------+
2 rows in set (0.00 sec)


#模糊匹配
mysql> SELECT * FROM test1 WHERE MATCH('my document');
+------+----------+------------+
| id   | group_id | date_added |
+------+----------+------------+
|    1 |        1 | 1452839063 |
|    2 |        1 | 1452839063 |
+------+----------+------------+
2 rows in set (0.00 sec)


mysql> SELECT *, WEIGHT() FROM test1 WHERE MATCH('"document one"/1');SHOW META;
+------+----------+------------+----------+
| id   | group_id | date_added | weight() |
+------+----------+------------+----------+
|    1 |        1 | 1452839063 |     2663 |
|    2 |        1 | 1452839063 |     1528 |
+------+----------+------------+----------+
2 rows in set (0.18 sec)
#相關的元數據信息
+---------------+----------+
| Variable_name | Value    |
+---------------+----------+
| total         | 2        |
| total_found   | 2        |
| time          | 0.175    |
| keyword[0]    | document |
| docs[0]       | 2        |
| hits[0]       | 2        |
| keyword[1]    | one      |
| docs[1]       | 1        |
| hits[1]       | 2        |
+---------------+----------+
9 rows in set (0.00 sec)

#相關的統計信息
mysql> SET profiling=1;SELECT * FROM test1 WHERE id IN (1,2,4);SHOW PROFILE;
Query OK, 0 rows affected (0.00 sec)

+------+----------+------------+
| id   | group_id | date_added |
+------+----------+------------+
|    1 |        1 | 1452839063 |
|    2 |        1 | 1452839063 |
|    4 |        2 | 1452839063 |
+------+----------+------------+
3 rows in set (0.00 sec)

+--------------+----------+----------+---------+
| Status       | Duration | Switches | Percent |
+--------------+----------+----------+---------+
| unknown      | 0.000206 | 4        | 65.61   |
| net_read     | 0.000004 | 1        | 1.27    |
| local_search | 0.000040 | 1        | 12.74   |
| sql_parse    | 0.000027 | 1        | 8.60    |
| fullscan     | 0.000002 | 1        | 0.64    |
| finalize     | 0.000015 | 1        | 4.78    |
| aggregate    | 0.000008 | 2        | 2.55    |
| net_write    | 0.000012 | 1        | 3.82    |
| eval_post    | 0.000000 | 1        | 0.00    |
| total        | 0.000314 | 13       | 0       |
+--------------+----------+----------+---------+
10 rows in set (0.00 sec)


mysql> SELECT id, id%3 idd FROM test1 WHERE MATCH('this is | nothing') GROUP BY idd;SHOW PROFILE;
+------+------+
| id   | idd  |
+------+------+
|    1 |    1 |
|    2 |    2 |
|    3 |    0 |
+------+------+
3 rows in set (0.18 sec)

+--------------+----------+----------+---------+
| Status       | Duration | Switches | Percent |
+--------------+----------+----------+---------+
| unknown      | 0.000430 | 6        | 0.24    |
| net_read     | 0.000014 | 1        | 0.01    |
| local_search | 0.000192 | 1        | 0.11    |
| sql_parse    | 0.000056 | 1        | 0.03    |
| dict_setup   | 0.000002 | 1        | 0.00    |
| parse        | 0.000040 | 1        | 0.02    |
| transforms   | 0.000003 | 1        | 0.00    |
| init         | 0.177525 | 3        | 99.51   |
| read_docs    | 0.000053 | 2        | 0.03    |
| get_docs     | 0.000008 | 5        | 0.00    |
| get_hits     | 0.000005 | 2        | 0.00    |
| filter       | 0.000002 | 1        | 0.00    |
| rank         | 0.000001 | 3        | 0.00    |
| sort         | 0.000014 | 2        | 0.01    |
| finalize     | 0.000004 | 1        | 0.00    |
| aggregate    | 0.000017 | 2        | 0.01    |
| net_write    | 0.000027 | 1        | 0.02    |
| eval_post    | 0.000001 | 1        | 0.00    |
| total        | 0.178394 | 35       | 0       |
+--------------+----------+----------+---------+
19 rows in set (0.00 sec)


mysql> CALL KEYWORDS ('one two three', 'test1');
+------+-----------+------------+
| qpos | tokenized | normalized |
+------+-----------+------------+
| 1    | one       | one        |
| 2    | two       | two        |
| 3    | three     | three      |
+------+-----------+------------+
3 rows in set (0.00 sec)
#hits表示是否命中
mysql> CALL KEYWORDS ('one two three', 'test1', 1);
+------+-----------+------------+------+------+
| qpos | tokenized | normalized | docs | hits |
+------+-----------+------------+------+------+
| 1    | one       | one        | 1    | 2    |
| 2    | two       | two        | 1    | 2    |
| 3    | three     | three      | 0    | 0    |
+------+-----------+------------+------+------+
3 rows in set (0.00 sec)

 試驗到這兒吧


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最常用的方式: int a = 12; //註意:通常情況下,這個會設置成一個類變數,比如說Segement中的段鎖與copyOnWriteArrayList中的全局鎖 final ReentrantLock lock = new ReentrantLock...
  • 初次接觸python,寫的很簡單,開發工具PyCharm,python 3.4很方便python 部分模塊安裝時需要其他的附屬模塊之類的,可以先pip install wheel然後可以直接下載whl文件進行安裝pip installlxml-3.5.0-cp34-none-win32.whl定義一...
  • 在多線程應用中鎖是一個很簡單又很複雜的技術,之所以要用到鎖是因為在多進程/線程環境下,一段代碼可能會被同時訪問到,如果這段代碼涉及到了共用資源(數據)就需要保證數據的正確性。也就是所謂的線程安全。之前寫過一篇著於Java線程安全的博客:鏈接我是在寫一個服務端程式時應用到讀寫鎖,在一個記憶體緩存。先來看...
  • print ('hello world!')1. 下載python,並設置path系統環境變數;當在命令行中輸入python,出現如下界面,顯示安裝成功。2. 安裝最新的sublime,使用註冊機破解,或者Help->中輸入license,提供三個親測可用的激活碼,在文章最後。 打開sublime....
  • 原文網址:http://www.cnblogs.com/retop/p/4677148.html註:本人使用的Django1.8.3版本進行測試除了使用Django內置表單,有時往往我們需要自定義表單。對於自定義表單Post方式提交往往會帶來由CSRF(跨站請求偽造)產生的錯誤"CSRF verif...
  • 什麼是const限定符?Const限定符是我們通常所說的常量限定符,被const修飾的對象具有常量性質,只能讀,不能寫。為什麼使用const限定符?用const變數取代“魔數”,代碼更容易理解和維護。例如:以const常變數作為數組的界;const常變數作為switch的條件標號。C++“最小特權原...
  • 北京尚學堂提供1.Java集合框架是什麼?說出一些集合框架的優點?每種編程語言中都有集合,最初的Java版本包含幾種集合類:Vector、Stack、HashTable和Array。隨著集合的廣泛使用,Java1.2提出了囊括所有集合介面、實現和演算法的集合框架。在保證線程安全的情況下使用泛型和併發集...
  • BAT站在中國互聯網的頂端,引導著中國互聯網的發展走向。。。既受到了多數程式員的關註,也在被我們所惦記著。。。 關於SmartQQ的協議來自HexBlog,根據他的博客我自己也一步一步的去分析,去嘗試,自己不瞭解不知道的總是神秘的,如果你有這種好奇心,那麼真相就只有一個。接下來我先把協議放出來...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...