導航:首頁 > 編程語言 > javasphinx

javasphinx

發布時間:2022-09-05 21:20:51

❶ 有沒有java 開源的簡單搜索引擎

被邀請回答這個問題,但是似乎問錯人了,問的是開源的搜索引擎,但是很抱歉,我對此領域並不熟悉。

我所知道的搜索引擎方案僅有:

1. Nutch (http://nutch.apache.org/)

2. Datapark search http://www.dataparksearch.org/

以下列表不是一個完整的搜索引擎方案,一般都不包括爬蟲,確切的說是IR或者全文檢索引擎更為恰當:
1. Zettair http://www.seg.rmit.e.au/zettair/
2. Indri http://www.lemurproject.org/indri/
3. Terrier http://terrier.org/
4. Galago http://www.galagosearch.org/
5. Zebra https://www.indexdata.com/zebra

6. Lucene 及其變種

❷ 如何調用Sphinx 和api介面

如何調用Sphinx

按上面配置,第5節點對資料庫進行了索引,通過Sphinx自帶的search(在bin/release目錄)就可以在命令行進行搜索:

(搜索CGArt)
windows上:
search -c d:/sphinx/sphinx.conf CGArt
linux上:
cd /usr/local/sphinx
./bin/search -c sphinx.conf CGArt
運行後,系統提示一堆信息:
....
....
words:
1. 'cgart': 36 documents, 189 hits
這個表示庫中有36條記錄符合要求,出現CGArt的有189處。應用程序如果想調用Sphinx,可以從兩個方面:

一是通過Sphinx官方提供的API介面(介面有Python,Java,php三種版本)

二是通過安裝SphinxSE(具體見1.2部分),然後創建一個中介sphinxSE類型的表,再通過執行特定的SQL語句實現。

通過官方API調用Sphinx(以PHP為例)

在sphinx安裝目錄有一個API目錄,裡面有三個PHP文件:test.php,test2.php和sphinxapi.php。 sphinxapi.php是sphinx調用介面封裝文件,test.php是一個在命令行下執行的查詢例子文件,test2.php是一個生成摘要的 例子文件。

在命令下行運行test.php(Linux上沒有API目錄,需要從源程序包中復制api目錄至/usr/local/sphinx)

Windows上:
D:\sphinx\bin\release>c:\php5.2\php.exe -c c:\php5.2\php.ini ..\..\api\test.php -i cgfinal CGartLinux上(php在/usr/local/php目錄,sphinx.conf在/usr/local/sphinx目錄):

cd /usr/local/sphinx
/usr/local/php/bin/php api/test.php -i cgfinal CGArtSphinx的API查詢介面主要有這些內容(其實對照 一下sphinxapi.php就清楚了):

//創建Sphinx的客戶端介面對象
$cl = new SphinxClient ();

//設置連接Sphinx主機名與埠
$cl->SetServer('localhost',3312);

//可選,為每一個全文檢索欄位設置權重,主要根據你在sql_query中定義的欄位的順序,Sphinx系統以後會調整,可以按欄位名稱來設定權重
$cl->SetWeights ( array ( 100, 1 ) );

//設定搜索模式,SPH_MATCH_ALL,SPH_MATCH_ANY,SPH_MATCH_BOOLEAN,SPH_MATCH_EXTENDED,SPH_MATCH_PHRASE
$cl->SetMatchMode(SPH_MATCH_ALL);

//設定過濾條件$attribute是屬性名,相當於欄位名(用SPH_MATCH_EXTENDED時),$value是值,$exclude是布爾型,
當為true時,相當於$attribute!=$value,默認值是false
$cl->SetFilter($attribute, $values, $exclude);

//設定group by
//根據分組方法,匹配的記錄集被分流到不同的組,每個組都記錄著組的匹配記錄數以及根據當前排序方法本組中的最佳匹配記錄。
//最後的結果集包含各組的一個最佳匹配記錄,和匹配數量以及分組函數值
//結果集分組可以採用任意一個排序語句,包括文檔的屬性以及sphinx的下面幾個內部屬性
//@id--匹配文檔ID
//@weight, @rank, @relevance--匹配權重
//@group--group by 函數值
//@count--組內記錄數量
//$groupsort的默認排序方法是@group desc,就是按分組函數值大小倒序排列
$cl->SetGroupBy($attribute, $func, $groupsort);

//設定order by的內容,第一個參數是排序方法名,值有
// SPH_SORT_RELEVANCE,SPH_SORT_ATTR_DESC,SPH_SORT_ATTR_ASC,SPH_SORT_TIME_SEGMENTS,SPH_SORT_EXTENDED
//$sortby的值如"HITS desc"
$cl->SetSortMode(SPH_SORT_EXTENDED, $sortby);

//set count-distinct attribute for group-by queries,$distinct為字元串
$cl->SetGroupDistinct ( $distinct );

//相當於mysql的limit $offset,$limit
$cl->SetLimits($start,$limit)

//$q是查詢的關鍵字,$index是索引名稱,當等於*時表查詢所有索引

❸ 全文檢索工具有哪些

1. Lucene

Lucene的開發語言是Java,也是Java家族中最為出名的一個開源搜索引擎,在Java世界中已經是標準的全文檢索程序,它提供了完整的查詢引擎和索引引擎,沒有中文分詞引擎,需要自己去實現,因此用Lucene去做一個搜素引擎需要自己去架構.另外它不支持實時搜索,但linkedin和twitter有分別對Lucene改進的實時搜素. 其中Lucene有一個C++移植版本叫CLucene,CLucene因為使用C++編寫,所以理論上要比lucene快.
2. Sphinx

Sphinx是一個用C++語言寫的開源搜索引擎,也是現在比較主流的搜索引擎之一,在建立索引的事件方面比Lucene快50%,但是索引文件比Lucene要大一倍,因此Sphinx在索引的建立方面是空間換取事件的策略,在檢索速度上,和lucene相差不大,但檢索精準度方面Lucene要優於Sphinx,另外在加入中文分詞引擎難度方面,Lucene要優於Sphinx.其中Sphinx支持實時搜索,使用起來比較簡單方便.
3. Xapian

Xapian是一個用C++編寫的全文檢索程序,它的api和檢索原理和lucene在很多方面都很相似,算是填補了lucene在C++中的一個空缺.
4. Nutch

Nutch是一個用java實現的開源的web搜索引擎,包括爬蟲crawler,索引引擎,查詢引擎. 其中Nutch是基於Lucene的,Lucene為Nutch提供了文本索引和搜索的API.

對於應該使用Lucene還是使用Nutch,應該是如果你不需要抓取數據的話,應該使用Lucene,最常見的應用是:你有數據源,需要為這些數據提供一個搜索頁面,在這種情況下,最好的方式是直接從資料庫中取出數據,並用Lucene API建立索引.
5. DataparkSearch

DataparkSearch是一個用C語言實現的開源的搜索引擎. 其中網頁排序是採用神經網路模型. 其中支持HTTP,HTTPS,FTP,NNTP等下載網頁.包括索引引擎,檢索引擎和中文分詞引擎(這個也是唯一的一個開源的搜索引擎里有中文分詞引擎).能個性化定製搜索結果,擁有完整的日誌記錄.
6. Zettair

Zettair是根據Justin Zobel的研究成果為基礎的全文檢索實驗系統.它是用C語言實現的. 其中Justin Zobel在全文檢索領域很有名氣,是業界第一個系統提出倒排序索引差分壓縮演算法的人,倒排列表的壓縮大大提高了檢索和載入的性能,同時空間膨脹率也縮小到相當優秀的水平. 由於Zettair是源於學術界,代碼是由RMIT University的搜索引擎組織寫的,因此它的代碼簡潔精煉,演算法高效,是學習倒排索引經典演算法的非常好的實例. 其中支持linux,windows,mac os等系統.
7. Indri

Indri是一個用C語言和C++語言寫的全文檢索引擎系統,是由University of Massachusetts和Carnegie Mellon University合作推出的一個開源項目. 特點是跨平台,API介面支持Java,PHP,C++.
來自網路。

❹ sphinx和solr哪個更適合php站點

## ES 缺點
基於java,會有一些java的常見問題需要注意,比如gc
單純執行速度上比C寫的sphinx慢

## sphinx 優點
純粹,沒有什麼花哨的其他功能
C寫的,速度快
新版本加了分布式索引、動態更新索引等功能

## 下面列舉Es比sphinx優秀的部分
1、部署簡單,雖然sphinx部署也挺簡單,但是在書寫配置的時候,你會發現,sphinx的配置是要寫好後,重啟sphinx,而Elasticsearch針對某個索引的配置,是可以動態寫入的。
2、調試簡單,sphinx有命令行工具可以調試,而Elasticsearch使用的是http介面進行調試,不需要專門的API類,幾行php代碼就可以寫一個Elasticsearch的API。
3、可視化工具比較多,有收費的,也有免費的,比如kibana head marvel。
4、提供結構化的JSON查詢語句,易讀性強
5、Es可以保留源數據(可選),也就是說,你可以不需要mysql的支持,就可以完成整個搜索過程,即使你不需要這個功能,在調試的時候,還是讓人感到非常便利,不用將查詢結果到資料庫匹配一下。
6、Es可以動態更新全文索引,動態更新單個記錄,而不像sphinx一樣需要重建全部
7、對UTF8的支持是不需要單獨配置的,天生為各種自然語言設計,而不僅僅是歐系語言

## 從中文分詞上來說
首先我覺得分詞最重要的基本都是詞庫,分詞演算法兩個工具基本都可以使用。
lucene 支持很多分詞工具,比如
word https://github.com/ysc/word
比如ik https://github.com/medcl/elasticsearch-analysis-ik
這兩個工具最近都很活躍,因為Es更新2.0 和 2.1

比較分詞區別(sphinx可能有誤):
sphinx分詞 我不太熟悉它的機制,多數情況下我使用scws分詞,發送給sphinx,然後設置匹配規則,比如最大匹配

Es的全文索引是基於分詞的,也就是事先分好詞,每個詞對應某些記錄,自動進行TF/IDF的運算,得到一個評分後返回,當然這個評分可以改(sphinx同樣支持修改評分)

另一方面ES也支持類似sphinx的匹配方式,模糊匹配,一般會一起使用,一個詞不在分詞庫中的時候,或者用戶寫錯了,就用fuzzy,所以Es在功能上,應該和sphinx不會有太多差別,而且要更多。

## 後期維護上:
sphinx的配置文件在mysql分表之後,維護起來是比較麻煩的,你可以用php腳本當做配置文件,這樣會好很多。
Es的索引是可以主動發給它去建立的(通過http介面),分表之後,它不關心資料庫狀態和結構。新增欄位可以熱更新。

## 擴展性上:
Es和sphinx都支持分布式索引,擴展性都沒有問題
兩者都支持別名,Es的別名加上動態建立索引,使得更換索引結構或者重建索引後,支持0宕機時間。而sphinx的rotate選項可以動態更新索引(不知道能不能動態創建索引,因為sphinx我在使用的時候,索引都要求寫在配置文件里。
性能方面沒有測試數據。從直觀感受上sphinx要快一些。

## 文檔方面
感覺兩個工具都差不多,中文資料一般般,英文資料很全。

❺ java,覺得技術增長有點瓶頸,如何克服提高

1. 確定自己的方向,雖然說選擇了軟體開發,但其實軟體開發是一個很籠統的說法,面向不同行業的開發人員對其所需的技術要求是不同,
比如說,有些應用開發對多線程處理要求較高(Timer類,Thread類等),而有些則是對網路套接字之類的要求比較高(這里也有區分,無外乎因應用環境的不同在同步非同步,阻塞非阻塞中做選擇,io類,nio類,net類等),而有些則是面向企業辦公或者說流程報表展示等需求較高(J2EE裡面的Servlet,JSP+html,Ajax,Jquery,SSH三大件等以及對各大主流瀏覽器間和版本間兼容性的研究,或者使用Plug-in技術),而有些專注外包的企業就只搞插件開發(Plug-in),等等.至於資料庫知識就看你們公司有無專業資料庫程序員了(這個東東基礎部分是真正的基礎,是個程序員多少都會和它有點交集,至於更深的,不走這個方向的就沒必要太深入了).
看公司發展方向或者說找到的下家發展方向做有目的的深入學習.在敏捷開發之餘做點研究.

2. 練好基本功.把會的學深了,把不熟的練熟了.有時候會突然接到任務讓個人單獨開發一個小工具,而布置任務的領導不一定了解開發細節,可能任務看似簡單,而構建過程復雜,這時扎實的基本功,和對各工具類,和主要類的熟練使用就變得非常有用,能減少大量查找資料的時間,並有效提高代碼的各項性能.(這是真正的考驗哦~把catch里的東西想全了!!)

所以沒事在家就多寫幾個經常會用得到的jar包,寫好注釋(這是幹啥使的,怎麼使),以備不時之需,同時也是對自己的一種提高(這個...代碼被正式採用後,這些個外面找不到的jar包源碼嘛搞不好就讓你躲過一次裁員,不過即使不交出這jar包的源碼,對公司發展影響也不大,這種東西絕大多數不會去過混淆器,更別說做加密)

3.干一年多了,應該要逐步有自己的代碼風格了,變數命名固定化,注釋固定化,

4. 如果還想提高,那麼就試著看下面的.
在完成任務的同時開始思考程序結構,如果這個項目交給自己來做需求分析,定詳細設計方案該如何做,現在項目經理或技術總監給出的框架優缺點大致有哪些,性能瓶頸在哪?
(雖說現在編程有一部分開發可以不太考慮性能消耗問題,但這確實是區分一個熟手和生手的分水嶺,熟知計算機原理,網路通訊原理,資料庫原理以及數模和單片機原理,有接觸到多媒體包括游戲動作編程的熟知驅動設計原理,做出來的東西明顯要好很多!!!)

總而言之就是:吃透現在用到的和可能用到的所有類以及大眾化的各類工具類(log4j,dom4j,commons-httpclient,Xfire,C3P0,Communications,Sphinx-4,JGraph,OpenJGraph等等,只關注自己領域內的就行),寫出屬於你自己的代碼,並嘗試去學習領域內的原理知識(不少都還給老師了?沒事連想都想不起來的說明在你的領域中就不會用到,啥時用啥時去學吧),一邊學習原理一邊思考程序設計問題,可以虛心找公司里的技術較好的一同探討,如果合適的話與技術總監或設計者一起探討也很不錯(只是探討不是堅持己見,設計的好壞把控在測試,產品經理和用戶手中,其責把控設計者身上!即使你覺得你的方案更好也只能探討,畢竟設計者拿了那份薪水,並為之承擔著相應的責任,而不是程序員)

❻ php windows下怎麼安裝sphinx,安裝後又怎麼使用

1、下載,我這里下的是「Win64 binaries w/MySQL+PgSQL+libstemmer+id64 support」,下載後文件名:sphinx-2.0.6-release-win64-id64-full.zip;
2、將其解壓到D: \ sphinx,並在D:\sphinx下新建目錄data(用來存放索引文件)與log(用來存放日誌文件);
3、將D:\sphinx\sphinx.conf.in復制到D:\sphinx\bin\sphinx.conf.in,並重命名為sphinx.conf;
4、修改 D:\sphinx\bin\sphinx.conf 如下:
4.1、搜索source src1修改{...}中的內容
# 使用的資料庫類型
type = mysql
# 伺服器
sql_host = localhost
# 資料庫登錄名
sql_user = root
# 資料庫登錄密碼
sql_pass = root
# 操作的資料庫名稱
sql_db = test
# 資料庫伺服器埠
sql_port = 3306
# 設置編碼,如果用的是utf-8編碼
sql_query_pre = SET NAMES utf-8
(以上7條前如有#將其刪除)
4.2、搜索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
(以上5條前如有#將其刪除)
5、導入測試數據將D:\sphinx\example.sql中語句執行到test資料庫中,注意:test資料庫創建時需要指定為utf-8格式;
6、打開cmd窗口,進入目錄D:\sphinx\bin;
7、建立索引,執行indexer.exe test1,test1即為sphinx.conf中index test1
Sphinx 2.0.6-id64-release (r3473)
Copyright (c) 2001-2012, Andrew Aksyonoff
Copyright (c) 2008-2012, Sphinx Technologies Inc (http://sphin

using config file './sphinx.conf'...
indexing index 'test1'...
collected 4 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 4 docs, 222 bytes
total 0.019 sec, 11252 bytes/sec, 202.74 docs/sec
total 2 reads, 0.000 sec, 0.2 kb/call avg, 0.0 msec/call avg
total 9 writes, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg
成功...
8、搜索'test',執行search.exe test
Sphinx 2.0.6-id64-release (r3473)
Copyright (c) 2001-2012, Andrew Aksyonoff
Copyright (c) 2008-2012, Sphinx Technologies Inc (http://sphinxsearch.com)

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=2421, group_id=1, date_added=Tue Feb 26 10:25:31 2013
id=1
group_id=1
group_id2=5
date_added=2013-02-26 10:25:31
title=test one
content=this is my test document number one. also checking search within
phrases.
2. document=2, weight=1442, group_id=3, date_added=Tue Feb 26 10:25:31 2013
id=2
group_id=3
group_id2=6
date_added=2013-02-26 10:25:31
title= ????
content=this is my test document number two ???????
3. document=4, weight=1442, group_id=2, date_added=Tue Feb 26 10:25:31 2013
id=4
group_id=2
group_id2=8
date_added=2013-02-26 10:25:31
title=doc number four
content=this is to test groups

words:
1. 'test': 3 documents, 4 hits

index 'test1stemmed': search error: failed to open D:/sphinx/data/test1stemmed.s
ph: No such file or directory.
最後面的一句error可忽略;
9、搜索中文,首先將資料庫中的內容update含有中文,執行sql語句:
UPDATE documents SET title='中文', content='this is my test document number one. also checking search within phrases.含有中文。' WHERE id=1;
UPDATE documents SET title='中文標題', content='this is my test document number one. also checking search within phrases.含有中文內容。' WHERE id=2;
UPDATE documents SET title='中文標題測試', content='this is my test document number one. also checking search within phrases.含有中文內容。' WHERE id=3;
重新建立索引(執行第7步);
然後執行search.exe 中文
Sphinx 2.0.6-id64-release (r3473)
Copyright (c) 2001-2012, Andrew Aksyonoff
Copyright (c) 2008-2012, Sphinx Technologies Inc (http://sphinxsearch.com)

using config file './sphinx.conf'...
indexing index 'test1'...
collected 4 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 4 docs, 349 bytes
total 0.025 sec, 13808 bytes/sec, 158.26 docs/sec
total 2 reads, 0.000 sec, 0.3 kb/call avg, 0.0 msec/call avg
total 9 writes, 0.000 sec, 0.2 kb/call avg, 0.0 msec/call avg

D:\sphinx\bin>search.exe 中文
Sphinx 2.0.6-id64-release (r3473)
Copyright (c) 2001-2012, Andrew Aksyonoff
Copyright (c) 2008-2012, Sphinx Technologies Inc (http://sphinxsearch.com)

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

words:

index 'test1stemmed': search error: failed to open D:/sphinx/data/test1stemmed.s
ph: No such file or directory.
沒有搜索到,因為windows命令行中的中文時GBK編碼格式,所以沒有匹配內容。我們可以使用PHP程序來試試;
10、進入D:\sphinx\api\目錄,可以發現sphinx支持php、java、ruby調用,並提供對應的test例子,這里我們使用php來操作,首先將api復制到D:\www\下並重命名為sphinxapi,因為我本機上apache的web目錄為D:\www,在D:\www\sphinxapi\下新建search.php,內容為:
<?php
require 'sphinxapi.php';
$s = new SphinxClient();
$s->SetServer('localhost', 9312);
$result = $s->Query('中國');
print_r($result);
echo '<br /><br />';
$result = $s->Query('中文');
print_r($result);
?>
然後回到cmd命令行中,開啟sphinx服務,執行searchd.exe(這個必須要執行的)
Sphinx 2.0.6-id64-release (r3473)
Copyright (c) 2001-2012, Andrew Aksyonoff
Copyright (c) 2008-2012, Sphinx Technologies Inc (http://sphinxsearch.com)

using config file './sphinx.conf'...
WARNING: compat_sphinxql_magics=1 is deprecated; please update your application
and config
WARNING: preopen_indexes=1 has no effect with seamless_rotate=0
listening on all interfaces, port=9312
listening on all interfaces, port=9306
precaching index 'test1'
precaching index 'test1stemmed'
WARNING: index 'test1stemmed': preload: failed to open D:/sphinx/data/test1stemm
ed.sph: No such file or directory; NOT SERVING
precaching index 'rt'
WARNING: index 'rt': preload: failed to open @CONFDIR@/data/rt.lock: No such fil
e or directory; NOT SERVING
precached 3 indexes in 0.018 sec
成功...
然後在瀏覽器中執行http://localhost/sphinxapi/search.php,列印出來的數組結果可以很清晰的看見搜索的結果比對。。。
11、至此sphinx在windows下的簡單安裝與使用就完成了。

閱讀全文

與javasphinx相關的資料

熱點內容
體重小本app怎麼樣 瀏覽:777
編程語言需求 瀏覽:935
當兵體重怎麼個演算法 瀏覽:169
加密的電腦文件帶出去怎麼打開 瀏覽:849
死循環會在編譯的時候出錯嗎 瀏覽:986
c51單片機特殊寄存器的原理 瀏覽:578
閃耀永恆特利加密鑰 瀏覽:761
如何誇程序員 瀏覽:781
天津期貨python招聘 瀏覽:265
單片機機器語言寫的程序 瀏覽:553
韓國直播軟體app叫什麼名 瀏覽:920
軍營訓練不聽教官的命令 瀏覽:263
v開頭的音樂播放器是什麼APP 瀏覽:122
單片機是怎麼做出來的 瀏覽:319
博圖怎麼作為opc伺服器 瀏覽:103
編譯做題軟體 瀏覽:298
橋梁檢測pdf 瀏覽:689
化解壓力的一種方法 瀏覽:684
路由器和DSN伺服器有什麼區別 瀏覽:551
android伸縮控制項 瀏覽:861