Coreseek Windows下安裝調試

 由于項目需要全文檢索,后面就去網上查了下資料,找到了Sphinx【中文是獅身人面像】這個全文檢索引擎,聽說挺好用的,不過沒有中文分詞。后面又去找了一下,找到了Coreseek,一款中文全文檢索/搜索軟件。

?

一、Sphinx PHP擴展下載

  PHP已經有專門的Sphinx的擴展文件,點擊這里可以下載到不同版本的擴展。

  

  擴展安裝成功后,就能看到sphinx信息了。

  

  也可以通過引用一個php類文件達到同樣的效果,文件是在api文件夾下面的sphinxapi.php。這個更好用點,在調試的時候發現,如果是直接引用的那個dll有時候會報方法不存在,但是明明在PHP:Sphinx的API說明里面是有的。

  

?

二、安裝Coreseek

1) 我這邊下載了4.1的版本。按照網站上面寫的過程,我在本地布了一下。

  這個local目錄其實可以自己隨便建立,這里建的我感覺好深,打dos命令的時候挺麻煩的。

  

  

?

2) 打開下載下來的壓縮包,etc里面有很多conf的配置文件。

  在var\test文件里有個documents.sql的文件,這一個demo數據庫,等下就會用這個做測試。

  

?

3) 把etc中的csft_mysql.conf文件復制到bin中,并改名為sphinx.conf。

  因為我的全文檢索需要配合MySQL數據庫,所以需要配置這個文件。

  

?

4) 修改配置文件,剛開始配置文件沒設置好,老會報錯。

復制代碼
#MySQL數據源配置,詳情請查看:http://www.coreseek.cn/products-install/mysql/
#請先將var/test/documents.sql導入數據庫,并配置好以下的MySQL用戶密碼數據庫#源定義
source mysql
{type                    = mysqlsql_host                = localhostsql_user                = rootsql_pass                = 123456sql_db                  = sphinxsql_port                = 3306sql_query_pre            = SET NAMES utf8sql_query                = SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content FROM documents#sql_query第一列id需為整數#title、content作為字符串/文本字段,被全文索引sql_attr_uint            = group_id           #從SQL讀取到的值必須為整數sql_attr_timestamp        = date_added #從SQL讀取到的值必須為整數,作為時間屬性sql_query_info_pre      = SET NAMES utf8                                        #命令行查詢時,設置正確的字符集sql_query_info            = SELECT * FROM documents WHERE id=$id #命令行查詢時,從數據庫讀取原始數據信息
}#index定義
index mysql
{source            = mysql             #對應的source名稱path            = C:/usr/local/coreseek-4.1-win32/var/data/documents #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/...docinfo            = externmlock            = 0morphology        = nonemin_word_len        = 1html_strip                = 0#中文分詞配置,詳情請查看:http://www.coreseek.cn/products-install/coreseek_mmseg/#charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux環境下設置,/符號結尾charset_dictpath = C:/usr/local/coreseek-4.1-win32/etc/        #Windows環境下設置,/符號結尾,最好給出絕對路徑,例如:C:/usr/local/coreseek/etc/...charset_type        = zh_cn.utf-8
}#全局index定義
indexer
{mem_limit            = 128M
}#searchd服務定義
searchd
{compat_sphinxql_magics = 0listen                  =   9312read_timeout        = 5max_children        = 30max_matches            = 1000seamless_rotate        = 0preopen_indexes        = 0unlink_old            = 1pid_file = C:/usr/local/coreseek-4.1-win32/var/log/searchd_mysql.pid  #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/...log = C:/usr/local/coreseek-4.1-win32/var/log/searchd_mysql.log        #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/...query_log = C:/usr/local/coreseek-4.1-win32/var/log/query_mysql.log #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/...binlog_path =                                #關閉binlog日志
}
復制代碼

?

5) 建立索引,打一句dos命令就行。

  

  在#index定義中,設置了path的路徑,在這個路徑里面能夠看到索引文件。

  

?

6) 打開控制臺讓Sphinx監聽端口,接收搜索命令。

  

  searchd 可以安裝成一個Windows服務,命令如下:

C:\usr\local\coreseek> C:\usr\local\coreseek\bin\searchd.exe --install --config C:\usr\local\coreseek\etc\coreseek.conf --servicename Coreseek

  這樣?searchd?服務應該出現在“控制面板->系統管理->服務”的列表中了. 服務應該出現在“控制面板->系統管理->服務”的列表中了。

? ? 刪除服務的命令如下:

sc delete Coreseek

?

三、PHP代碼測試

復制代碼
<?php
header('Content-Type: text/html; charset=utf-8');//防止中文顯示為亂碼
$s = new SphinxClient;//已經引入擴展,所以不需要額外require文件了
$s->setServer("127.0.0.1", 9312);  
$s->setMatchMode(SPH_MATCH_PHRASE);  
$s->setMaxQueryTime(30);  $res = $s->query('愚人', 'mysql'); #[愚人]關鍵字,[mysql]數據源source  
$err = $s->GetLastError();  echo '<pre>';  
var_dump($res);  
var_dump($err);  
echo '</pre>';  
復制代碼

查看到結果:

與數據庫比對一下,可以看到搜索出了第一條的數據。

?

四、計算經緯度

   現在時髦的APP客戶端,基本上都會涉及到一個功能,就是尋找附近的XX,在我們服務端就是需要計算經緯度距離了。原先我們的做法是在MySQL中自定義一個計算兩個經緯度點距離的函數,在做查詢的時候調用,現在用Coreseek可以直接調用一個方法SetGeoAnchor。

先看看Coreseek中對這個方法的說明:

原型: function SetGeoAnchor ( $attrlat, $attrlong, $lat, $long )為地理距離計算設置錨點,并且允許使用它們。$attrlat 和 $attrlong是字符串,分別指定了對應經度和緯度的屬性名稱。
$lat 和 $long是浮點值,指定了錨點的經度和緯度值,以角度為單位。

再看看sphinx中API的說明:

Prototype: function SetGeoAnchor ( $attrlat, $attrlong, $lat, $long )Sets anchor point for and geosphere distance (geodistance) calculations, and enable them.$attrlat and $attrlong must be strings that contain the names of latitude and longitude attributes, respectively. 
$lat and $long are floats that specify anchor point latitude and longitude, in radians.

原文說的$lat 和 $long這兩個其實是弧度,而不是翻譯的角度。

?

1)在做索引的時候 ,將經緯度數據源轉換成弧度。?radians是MySQL中由度轉化為弧度的函數。

sql_query  = SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content,
        radians(longtitude) as longtitude, radians(latitude) as latitude FROM documents order by id desc

2)PHP中引用方法,并可做過濾與排序,deg2rad函數將角度轉換為弧度。

$lon = 121;
$lat = 31;
$s->SetGeoAnchor('latitude', 'longtitude', (float)deg2rad($lat), (float) deg2rad($lon));
$s->SetSortMode(SPH_SORT_EXTENDED, '@geodist asc'); // 按距離正向排序
//$s->SetFilterFloatRange('@geodist', 0.0, $radius); // 過濾掉大于10公里的地點

3)查看頁面結果,距離大約為49749;同時我用以前的那個MySQL自定義函數,在數據庫中跑了一下,距離是49704,兩個結果差不多。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/541740.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/541740.shtml
英文地址,請注明出處:http://en.pswp.cn/news/541740.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux sudo命令全稱,linux sudo命令的概念與使用

1.sudo介紹本文引用地址&#xff1a;http://www.eepw.com.cn/article/201610/305498.htmsudo是linux下常用的允許普通用戶使用超級用戶權限的工具&#xff0c;允許系統管理員讓普通用戶執行一些或者全部的root命令&#xff0c;如halt&#xff0c;reboot&#xff0c;su等等。這樣…

java 方法 示例_Java語言環境getISOCountries()方法與示例

java 方法 示例區域設置類getISOCountries()方法 (Locale Class getISOCountries() method) getISOCountries() method is available in java.util package. getISOCountries()方法在java.util包中可用。 getISOCountries() method is used to return an array of string that …

android shape.xml 屬性詳解

轉載源:http://blog.csdn.net/harvic880925/article/details/41850723 一、簡單使用 剛開始&#xff0c;就先不講一堆標簽的意義及用法&#xff0c;先簡單看看shape標簽怎么用。 1、新建shape文件 首先在res/drawable文件夾下&#xff0c;新建一個文件&#xff0c;命名為&#…

linux檢查防火墻是否阻擋端口,淺析linux查看防火墻狀態和對外開放的端口狀態...

1.查看防火墻狀態查看防火墻狀態 systemctl status firewalld開啟防火墻 systemctl start firewalld關閉防火墻 systemctl stop firewalld開啟防火墻 service firewalld start若遇到無法開啟先用&#xff1a;systemctl unmask firewalld.service然后&#xff1a;systemctl star…

Java類class getClasses()方法及示例

類的類getClasses()方法 (Class class getClasses() method) getClasses() method is available in java.lang package. getClasses()方法在java.lang包中可用。 getClasses() method is used to return an array that contains Class objects denoting all the public classes…

linux內核計數函數,linux中的內核引用計數器

linux中的內核引用計數器文檔 /Documentation/kref.txt翻譯。krefs能讓你往你的對象中添加一個引用計數器。如果你有一些需要在多處被使用和傳遞的對象&#xff0c;而你并沒有給這些對象中添加引用計數器的話&#xff0c;你的代碼肯定會有某些缺陷&#xff0c;會出現一些問題。…

jQuery常用的全局方法源碼

下面常用方法的詳細使用請查看&#xff1a;http://www.cnblogs.com/moqiutao/p/4775725.html 1.$.noConflict()方法 語法&#xff1a;jQuery.noConflict(removeAll) removeAll&#xff1a;布爾值。指示是否允許徹底將 jQuery 變量還原。 源碼&#xff1a; var// Map over jQuer…

isinstance_Java類class isInstance()方法及示例

isinstance類class isInstance()方法 (Class class isInstance() method) isInstance() method is available in java.lang package. isInstance()方法在java.lang包中可用。 isInstance() method is used to check whether the given object is an instance with the object d…

Linux比較大文件內容,Linux系統最大文件打開數優化,解決Too many open files報錯

這是一個Linux系統常見的故障&#xff0c;網絡上也能輕易的找到解決辦法&#xff0c;我也只是在工作中遇到了這個問題&#xff0c;所以在博客記錄下&#xff0c;以備不時之需。一、報錯截圖&#xff1a;圖為resin的報錯日志&#xff0c;很明顯提示了Too many open files&#x…

java日歷類add方法_Java日歷computeFields()方法及示例

java日歷類add方法日歷類的computeFields()方法 (Calendar Class computeFields() method) computeFields() method is available in java.util package. 在java.util包中提供了validateFields()方法 。 computeFields() method is used to convert current ms(milliseconds) t…

Varnish緩存代理簡介與配置

一、varnish原理&#xff1a;1&#xff09;Varnish簡介&#xff1a;varnish緩存是web應用加速器&#xff0c;同時也作為http反向緩存代理。你可以安裝varnish在任何http的前端&#xff0c;同時配置它緩存內容。與傳統的 squid 相比&#xff0c;varnish 具有性能更高、速度更快、…

Linux允許61440端口,釋放對某端口的占用

釋放對某端口的占用假如我們需要確定誰占用了我們的9050端口在windows命令行窗口下執行&#xff1a;1.查看所有的端口占用情況C:\>netstat -ano協議 本地地址 外部地址 狀態 PIDTCP 127.0.0.1:1434 0.0.…

as_hash ruby_Hash.merge(other_hash)方法與Ruby中的示例

as_hash rubyHash.merge(other_hash)方法 (Hash.merge(other_hash) Method) In this article, we will study about Hash.merge(other_hash) Method. The working of the method can’t be assumed because it’s quite a different name. Let us read its definition and unde…

linux 安裝nfs 客戶端,在CentOS 7上安裝NFS服務器和客戶端

NFS服務器和客戶端安裝在CentOS 7上版本1.0作者&#xff1a;Srijan Kishore 在Twitter上關注howtoing最后編輯 16 / Dec / 2014本指南介紹如何在CentOS 7.0中配置NFS服務器網絡文件系統(NFS)是一種流行的分布式文件系統協議&#xff0c;可讓用戶在其服務器上安裝遠程目錄。 該系…

安裝ORACLE 時報錯 /jre/1.4.2/lib/i386/libawt.so:

最近在linux下安裝oracle 10g時&#xff0c;碰到如下問題&#xff1a; /tmp/OraInstall2011-09-11_02-16-11PM/jre/1.4.2/lib/i386/libawt.so: libXp.so.6: cannot open shared object file: No such file or directory occurred.. 網上找了下&#xff0c;真讓人費解呀&am…

Java線程start()vs run()方法及示例

Java | 線程start()vs run()方法 (Java | Thread start() vs run() Methods) When we call the start() method, it leads to the creation of a new thread. Then, it automatically calls the run() method. If we directly call the run() method, then no new thread will …

linux安裝卸載mysql,Linux6 系列 安裝、卸載mysql

Linux6 系列 安裝、卸載mysqlLinux6 系列 安裝、卸載mysqlLinux環境下載mysql&#xff1a;https://blog.csdn.net/weixin_40816738/article/details/90111456一、安裝環境依賴&#xff1a;yum install -y cmake make gcc gcc-c libaio ncurses ncurses-devel二、安裝流程1、軟件…

Python | 如何使用pip升級所有Python軟件包?

While using Python as a programming language, its a very common scenario to use a virtual environment and PIP, a package manager for python. 當使用Python作為編程語言時&#xff0c;使用虛擬環境和PIP (Python的程序包管理器)是一種非常常見的情況。 Its a common …

linux下enum類型占幾個字節,enum大小問題

問題描述板卡有兩個CPU&#xff0c;ARMMIPS&#xff0c;同時運行三個系統REE(linux) TEE(SierraTEE) SEE(TDS)。TEE跟SEE通過RPC進行通信&#xff0c;有enum成員的結構體信息傳遞會出錯&#xff0c;如下結構體&#xff1a;struct sTag {enum A;enum B;int C;enum D;};問題分析…

ASP.NET導出word實例

ASP.NET導出word實例 最近遇到一個題目就是如何在asp.net中將數據導出到word中&#xff0c;由于數據是動態的&#xff0c;所以需要在后臺拼出想要的的格式&#xff0c;翻遍了網頁找出了一個比較滿意的代碼&#xff0c;感謝那位高手。代碼如下&#xff1a; public void Download…