Java實現的分布式搜索(知識)引擎:Iveely Search Engine
Iveely Search Engine 是由純Java實現,依靠Iveely.Framework和Iveely.Computing實現的分布式搜索(知識)引擎。
主要包含以下功能模塊:
A. 文本檢索(Web & Mobile)。
B. 圖片檢索(Web only)。
C. 百科檢索(Web only)。
D. 問答檢索(Web & Mobile)。
主要包含技術模塊:
A. Iveely.Framework:基礎模塊。
B. Iveely.Computing:程序運行平臺。
C. Iveely.Search: 搜索技術模塊。
D. Iveely.Search.UI: 網頁搜索模塊。
E. Iveely.Search.Mobile: 移動客戶端搜索模塊。
1.示例截圖
2. 編譯部署
2.1 編譯工具
編譯工具可以采用任何編譯器,但是上傳的文件中是按照Netbeans開發上傳,且JDK要求為1.8及其以上。
2.2 部署(含多機器和單機部署-windows,linux類似)
您可以在 https://onedrive.live.com/?cid=46338B55F029D384&id=46338B55F029D384%21140 中下載對應版本的示例程序(Iveely Computing 0.7.0 Release demo.rar),下周解壓之后:
![]()
上圖中各個文件夾的含義如下:
Console: 用戶控制臺。
Master: Iveely的Master結點。
Slave-7001:該機器上的7001端口服務結點。
Slave-7002:該機器上的7002端口服務結點。
這是一個單機運行的情況,如果是多機器情況,則Slave-7001和Slave-7002可拷貝到更多的機器中。其余操作方法均如下:
第一步,啟動Master。
運行參數:master 127.0.0.1 9010
“master”表示是master結點,127.0.0.1表示當前Master地址,9010表示Master服務端口。windows下可以雙擊“RunMaster.bat”.
效果如下:
![]()
第二步,啟動Slave。
運行參數:slave 127.0.0.1 9010 7001
“slave”表示是slave結點,127.0.0.1表示Master地址,9010是Master服務端口,7001是slave服務短褲。
效果如下:
![]()
第三步,啟動Console。
當當前機器或更多機器的master和slave結點均已經啟動的情況下,運行Console,運行參數:console 127.0.0.1 9010
"console"表示當前是用戶控制臺,127.0.0.1是master結點地址,9010是master端口。
2.3 有效的Console指令
既然有用戶控制臺,那么一定有有效的指令。
2.3.1 提交app到Iveely.computing。
2.3.2 在Iveely.Computing上執行App。
format:run [your app name] [count]
第三個參數 count 表示在幾個機器結點上執行 示例:
![]()
運行結果,在每一個slave上都會打印:
![]()
2.3.3 在Iveely.Computing上其它指令。
format:list ,表示查看所有app。
format:slaves ,表示查看所有Iveely.Computing上的運行機器結點。
當然這是常用的指令,還有更多指令,期待您在代碼中發現。
2.4 運行示例中的搜索引擎
當Iveely.Computing的master和salve均啟動起來之后,運行:
第一步:run Iveely.Search.DataService
第二步: run Iveely.Search.UIService 1
對于第二步,一定要注意后面有一個1,只需要在一個結點上運行。 第三步:修改 https://github.com/Fanping/iveely/blob/master/Iveely.Search.WebUI/JS/query.js 中最頂層的地址,端口不變,服務器地址改為UIService運行結點的IP,怎么看?用list命令即可看到。
如果從頭運行,不需要示例中的準備數據,請刪除文件夾下的Service_Text_Data和Service_Image_Data,然后部署好 Iveely.Computing,運行命令:run Iveely.Search.Backstage.其次再運行上面的第一步、第二步、第三步。這點很重要。
3.怎么寫基于Iveely.Computing的app?
難以想象的簡單:
寫一個類,添加一個函數: public String invoke(String arg) { ... } 并打包成jar。
程序被Iveely.Computing執行的時候會調此方法,但是如何讓Iveely.Computing識別到它?
在jar同在目錄下,新建一個文件app.run這是程序的配置文件,配置信息大致如下:
"
jar:HelloWorld.jar
class:helloworld.MyHelloWorld
params:NULL
cycle:daily
"
jar表示指定運行的jar,class是invoke方法所在的class,params是你想給他指定的參數,會是invoke的輸入參數,cycle是運行周期,這里標識是每天運行一次。還有hourly,always,weekly。
至此,您已經了解了最基本的信息,如果有疑問,歡迎您聯系我liufanping@iveely.com,或是發現bug,請您直接在issue中描述,謝謝!