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