Solr簡介
Solr是一個基於Lucene的Java搜索引擎服務器。Solr 提供了層面搜索、命中醒目顯示而且支持多種輸出格式(包括 XML/XSLT 和 JSON 格式)。它易於安裝和配置,並且附帶了一個基於 HTTP 的管理界面。
Solr在使用過程彙總也有增刪查的功能,具體以下
增長:
增長就是增長索引,將須要添加的內容添加至指定的solr文件,假設目前已有一個solr文件(E:\solr\solr_home\mycore1)
//引入的包以下
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.common.SolrInputDocument;
String url = "http://localhost:8080/solr/mycore1";
SolrClient server = new HttpSolrClient.Builder(url).build();//建立server
//server的獲取還能夠經過如下方式
//SolrDispatchFilter sdf = (SolrDispatchFilter) servlet.getAttribute("SolrRequestFilter");
//SolrClient server = new EmbeddedSolrServer(sdf.getCores(), "mycore1"); //mycore1表示solr的名稱
//建立要添加的doc
SolrInputDocument doc1 = new SolrInputDocument();
doc1.addField("id","1");
doc1.addField("title","廣東科技公司");
doc1.addField("descr","鄭州易網科技有限公司是一家以信息技術服務爲主導、立足於高科技領域的前沿,");
SolrInputDocument doc2 = new SolrInputDocument();
doc2.addField("id","2");
doc2.addField("title","廣西工業園");
doc2.addField("descr","雙喜工業園 項目簡介 雙喜工業園 項目由青州市雙喜傢俱備限公司與廣州普生生物);
//將doc加入值docs集合中
List<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
docs.add(doc1);
docs.add(doc2);
try {
UpdateResponse response = server.add(docs);//將docs添加
server.commit(); //提交代碼
} catch (SolrServerException | IOException e) {
e.printStackTrace();
}
//刪除索引
String url = "http://localhost:8080/solr/mycore1";
SolrClient server = new HttpSolrClient.Builder(url).build();//建立server
server.deleteByQuery( "*:*" );//刪除全部索引
server.deleteById("1");//根據id刪除索引
//查詢
String url = "http://localhost:8080/solr/mycore1";
SolrClient server = new HttpSolrClient.Builder(url).build();//建立server
String queryStr="title:科技";//模糊匹配匹配
//若是查詢條件有多個,可使用String queryStr="title:科技 OR descr:科技";或者AND關鍵字等匹配多個條件
SolrQuery query = new SolrQuery(queryStr);
//若是須要高亮顯示
query.setHighlight(true);//設置高亮
query.addHighlightField("title");//設置哪一個字段高亮顯示,多個字段高亮,中間用逗號隔開query.addHighlightField("title,descr");
//在solr6.3版本中,在solrconfig.xml中,已經設置了高亮的條件,在 <searchComponent class="solr.HighlightComponent" //name="highlight">標籤中,若是須要只須要修改相關標籤的內容便可,具體的每一個的意思,網上有不少
//如hl.fragsize表明最大返回字符數(好比爲50),hl.regex.slop默認值爲0.6,它表示顯示的字符數範圍爲(50-50*0.6至50+50*0.6)
QueryResponse response = server.query(query);
SolrDocumentList docs = response.getResults();
System.out.println("文檔個數:" + docs.getNumFound());
//下面顯示高亮的結果值
Map<String, Map<String, List<String>>> map = response.getHighlighting();//獲取高亮的內容
for (SolrDocument doc : docs) {
System.out.println(doc.getFieldValue("id")+"="+doc.getFieldValue("descr"));//非高亮的查詢結果
if (null != map) {
System.out.println(map.get(doc.getFieldValue("id").toString()));//高亮的結果值中,最外層map的key就是id值
}
}
注:在添加索引時,有id、title、descr三個字段,這三個字段必須出如今managerd-schema中,而且id必須設置爲惟一標識
<uniqueKey>id</uniqueKey>
<field name="descr" type="text_ik" indexed="true" stored="true" required="true" multiValued="false" />//name值具備惟一性
查詢的時候若是想要模糊匹配,好比title值爲「中華人民共和國」,查詢的條件爲「title:中華」,這是查詢是查不到任何東西的,由於須要分詞器來操做,沒有分詞器,默認使用的是徹底匹配,因此查不到
分詞器的定義以下,
一、https://code.google.com/archive/p/ik-analyzer/downloads下載響應的jar包,這裏下載的是IKAnalyzer2012FF_u2.jar
二、將該jar包放到mycore1\lib下面,沒有lib文件夾新建一個,而後在solrconfig.xml中配置lib標籤的目錄以下
<lib dir="E:/solr/solr_home/mycore1/lib" regex=".*\.jar" />
三、將放入ext.dic、IKAnalyzer.cfg.xml、stopword.dic三個文件放入E:\solr\solr_home\mycore1\conf下
四、在managed-schema中加入以下代碼
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
<analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
以上是定義一個分詞器,定義完成以後,在solr頁面analysis下面分詞是就能看到text_ik命名的分詞器
凡是要使用分詞器的屬性,如上文中定義的descr,須要增長type="text_ik",這樣說明該屬性在建索引和查詢時使用分詞器,查詢結果就能夠正常顯示
apache