sorl 6.5.1的solrj的常规使用
前言
- 使用java代码和solr做交互处理,就需要solrj的使用了。最近工作偏忙,有时间做出了基础版的solrj的使用。供大家参考。
- 大部分solrj的网络文章包括solr的wiki,都讲对象指向了HttpSolrServer,但solr的6.5.x的版本却怎么也找不到这个方法,使用的是HttpSolrClient,功能体验差不多。
- 下面贴出代码,基础应用应该是没问题。
package cn.rusth.solr.FirstExample;
import cn.rusth.properties.PropertiesReader;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.servlet.SolrRequestParsers;
import java.util.*;
/**
* solrclient测试类
* <br>基础功能测试
* Created by rusth on 2017/5/9.
*/
public class HttpSolrClientTest {
private HttpSolrClient client;
public HttpSolrClientTest() {
String url = PropertiesReader.read("/config/config.properties", "solr_url");
System.out.println("url=" + url);
client = new HttpSolrClient(url);
}
/**
* 增加和更新索引
* @throws Exception
*/
public void insertDataToSolr() throws Exception {
SolrInputDocument input = new SolrInputDocument();
input.addField("id", "1761",1.0f);
input.addField("goods_id", "7510");//不用_s的方式,配置文件已经进行了配置,无需此操作
input.addField("name", "爱韩寒");
client.add(input);//如果不存在就新增,存在就更新
//不能忘记提交
client.commit();
}
/**
* 删除索引
* @throws Exception
*/
public void deleteSolrIndex()throws Exception{
UpdateResponse result= client.deleteById("1755");
System.out.println(result.getStatus());
System.out.println(result.toString());
client.commit();
}
/**
* 借助SolrRequestParsers解析“检索字符串”进行检索
* @param queryString
* @return
* @throws Exception
*/
public String querySolr01(String queryString) throws Exception {
SolrParams solrParams = SolrRequestParsers
.parseQueryString(queryString);//直接使用有bug
try {
QueryResponse queryResponse = client.query(solrParams);
List<Goods> results = queryResponse.getBeans(Goods.class);
System.out.println(results.toString());
} catch (SolrServerException e) {
e.printStackTrace();
}
return null;
}
/**
* 查询
*借助ModifiableSolrParams对象接收查询条件进行检索
* @param queryString
* @return
* @throws Exception
*/
public List querySolr02(String queryString) throws Exception {
List<Goods> list=new ArrayList<Goods>();
ModifiableSolrParams solrParams = new ModifiableSolrParams();
solrParams.add("q", queryString);
solrParams.add("start", "0");
solrParams.add("rows", "10");
QueryResponse queryResponse = client.query(solrParams);
/**
* 返回值数据
* {responseHeader={status=0,QTime=0,params={q=name:"韩",start=0,rows=10,wt=javabin,version=2}},
* response={numFound=4,start=0,docs=[SolrDocument{id=1734, name=韩寒, _version_=1566910655055790080},
* SolrDocument{id=1741, name=韩韩, _version_=1566911251160760320},
* SolrDocument{id=1755, goods_id=7510, name=韩松, _version_=1566989989370134528},
* SolrDocument{id=1761, goods_id=7510, name=爱韩寒, _version_=1566991216722051072}]}}
*/
SolrDocumentList documents= queryResponse.getResults();//SolrDocumentList继承于 ArrayList<SolrDocument>
System.out.println("numFound="+documents.getNumFound());
System.out.println("start="+documents.getStart());
Iterator iterator= documents.iterator();
while(iterator.hasNext()){
SolrDocument solrDocument=(SolrDocument)iterator.next();
Goods g=new Goods();
g.setGoods_id(solrDocument.get("goods_id")!=null?Integer.parseInt(solrDocument.get("goods_id").toString()):0);
g.setName(solrDocument.get("name")!=null?solrDocument.get("name").toString():"");
list.add(g);//构建对象
}
return null;
}
/**
* 借助solrQuery对象接收查询条件进行检索
* @param queryString
* @return
* @throws Exception
*/
public String querySolr03(String queryString) throws Exception{
SolrQuery query = new SolrQuery();
query.setQuery(queryString);
query.setStart(0);
query.setRows(10);
QueryResponse queryResponse;
try {
queryResponse = client.query(query);
System.out.println(queryResponse.toString());
} catch (SolrServerException e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
HttpSolrClientTest httpService = new HttpSolrClientTest();
try {
// httpService.insertDataToSolr();
httpService.querySolr02("name:\"韩\"");//直接搜索 不用加*匹配
// httpService.deleteSolrIndex();//删除
} catch (Exception e) {
e.printStackTrace();
}
}
}
如果有字段无法添加到solr则代表的是此字段没有在solr中配置。
在solrhome下找到core的目录 (如rusth)的conf,修改里面的managed-schema文件。
在对应的字段下,增加想要的属性。
和下面的
然后重启tomcat即,新增数据,查询看看。
不要在意细节。具体看功能的实现。主要方法位于querySolr02。querySolr01有bug,欢迎高手补充使用方式。
后续,有时间的情况下,会继续扩充使用方式的。
solr 6.5.1的常规使用见最近的几篇文章。