一、概念
Apache Solr 是一個開源的搜尋伺服器。Solr 使用 Java 語言開發,主要基于 HTTP 和 Apache Lucene 實作。Apache Solr 中存儲的資源是以 Document 為對象進行存儲的。每個文檔由一系列的 Field 構成,每個 Field 表示資源的一個屬性。Solr 中的每個 Document 需要有能唯一辨別其自身的屬性,預設情況下這個屬性的名字是 id,在 Schema 配置檔案中使用:<uniqueKey>id</uniqueKey>進行描述。
Solr是一個高性能,采用Java5開發,基于Lucene的全文搜尋伺服器。Solr是一個獨立的企業級搜尋應用伺服器,目前很多企業運用solr開源服務。原理大緻是文檔通過Http利用XML加到一個搜尋集合中。查詢該集合也是通過 http收到一個XML/JSON響應來實作。它的主要特性包括:高效、靈活的緩存功能,垂直搜尋功能,高亮顯示搜尋結果,通過索引複制來提高可用性,提 供一套強大Data Schema來定義字段,類型和設定文本分析,提供基于Web的管理界面等。
Solr的所有版本下載下傳位址:http://archive.apache.org/dist/lucene/solr/
二、安裝配置以及程式插入與查詢
1、啟動solr
指令行視窗進入安裝目錄的bin下,直接使用solr start啟動,不加參數預設使用8983端口

2、通路solr控制台
位址:http://localhost:8983/solr
進入solr的控制台。 solr的工作核心名詞為core,可以了解成資料庫的表。 每個core都有自己的schema,可對應了解為資料庫的字段。
控制台如下圖所示。
目前是沒有core檔案的,需要我們自己配置。
3、配置core
配置我們自己的core。
在控制台的左邊菜單中,選擇Core Admin,進入core建立頁面。
在點選Add Core 儲存之前, 先進入solr的安裝目錄的 server - solr 下 建立一個和core同名的檔案夾,如:
進入E:\DevelopEnvironment\solr\solr-6.2.0\server\solr 建立 democore 。
檔案夾建好後,進入solr目錄的 server\solr\configsets\basic_configs 下,拷貝conf檔案夾到建立的檔案夾下
如:進入E:\DevelopEnvironment\solr\solr-6.2.0\server\solr\configsets\basic_configs 拷貝conf檔案夾到剛剛建立的democore
完成這一步準備工作後,回到控制台的Core Admin 錄入name和dir 點選 Add Core 儲存即可
儲存完成後,可看到該core:
對應的檔案夾内容也改變為:
4、建立schema
core檔案建立完成後,建立其對應的schema。
進入該core的Schema 菜單 ,點選Add Field ,在彈出的頁面中,錄入name和type,name代表字段的名稱,type為類型 ,類型選擇 text_general。
stored 意思為,将該字段的值進行存儲,用來以後索引的時候直接取出。
indexed 表示 将該字段進行索引。
錄入完成後,點選Add Field儲存即可。
至此,core和schema都建構完成。接下來要向solr的這個core插入資料。
5、使用程式插入資料
建立Java項目,将solr的對應jar包拷貝到項目中。
使用到的jar包在 dist 檔案夾下,主要包括 solrj這個jar包和solr-lib下的jar包,為了友善,直接全部拷貝過去即可。
如:E:\solr-6.5.1\dist E:\solr-6.5.1\dist\solrj-lib
以及運作程式插入程式
HttpSolrClient.Builder builder = new HttpSolrClient.Builder("http://localhost:8983/solr/democore");
HttpSolrClient solrClient = builder.build();
SolrInputDocument document = new SolrInputDocument();
document.addField("id", System.currentTimeMillis() + "");
document.addField("title", "計算機科學與技術" + System.currentTimeMillis());
solrClient.add(document);
solrClient.commit();
solrClient.close();
6、使用程式查詢資料
HttpSolrClient.Builder builder = new HttpSolrClient.Builder("http://localhost:8983/solr/democore");
HttpSolrClient solrClient = builder.build();
SolrQuery query = new SolrQuery();
query.set("q", "title:計算機科學與技術1495013922355");
QueryResponse response = solrClient.query(query);
SolrDocumentList list = response.getResults();
solrClient.commit();
System.out.println("比對數量:"+list.getNumFound());
Iterator itr = list.iterator();
while (itr.hasNext()) {
SolrDocument solrDocument = (SolrDocument) itr.next();
Object id = solrDocument.getFieldValue("id");
System.out.println(id.toString());
Object title = solrDocument.getFieldValue("title");
System.out.println(title.toString());
}
至此,全部完成。上述隻是最基本的使用配置,對于中文的分詞還是停留在最原始的每個中文都當作一個詞彙的分詞算法上。這是比較暴力不可取的,需要替換對應的中文分詞器。
常用的幾個指令:
啟動:solr start
指定端口啟動:solr start -p 8984
停止solr:solr stop -p 8983
删除指定的core檔案:solr delete -c corename
建立core:solr create -c corename
solr狀态檢視:solr status
參考部落格:http://blog.csdn.net/lxl631/article/details/52597134