lucene与solr03
程序员文章站
2022-07-01 10:40:11
...
SolrJ
Solrj是访问solr服务的java客户端,提供索引和请求方法,SolrJ通常在嵌入在业务系统中,通过SolrJ的API接口操作Solr服务。
实现步骤
(1):导入jar包
jcl-over-slf4j-版本号.jar
jul-to-slf4j-版本号.jar
log4j-版本号.jar
slf4-api-版本号.jar
slf4j-log412-版本号.jar
(2):和Solr服务器建立连接。HttpSolrServer对象建立连接。
(3):创建一个SolrInputDocument对象,然后添加域。
(4):将SolrInputDocument添加到索引库。
(5):提交
向文本域中添加文档
@Test
public void addDocument() throws Exception{
//和solr服务器创建链接
//参数:solr服务器的地址
SolrServer solrServer=new HttpSolrServer("http://localhost:8080/solr");
//创建一个文档对象
SolrInputDocument document=new SolrInputDocument();
//向文档添加域
//第一个参数:域名称,域的名称必须是schema.xml中的定义
//第二个参数:域的参数
document.addField("id", "c001");
document.addField("title_ik", "使用sorlj添加文档");
document.addField("contenk_ik", "文档的内容");
document.addField("product_name", "商品的名称");
//把document对象添加到索引库中
solrServer.add(document);
//提交
solrServer.commit();
}
根据查询删除
@Test
public void testDeleteDocumentByQueny() throws Exception, Exception{
SolrServer solrServer=new HttpSolrServer("http://localhost:8080/solr");
solrServer.deleteById("*:*");
solrServer.commit();
}
查询语句
@Test
public void testAueryIndex() throws Exception{
SolrServer solrServer=new HttpSolrServer("http://localhost:8080/solr");
//创建一个SolrQuery对象
SolrQuery query=new SolrQuery();
//设置查询条件
//query.set("q","*:*");
query.setQuery("*:*");
//执行查询
QueryResponse response=solrServer.query(query);
//取查询结果
SolrDocumentList solrDocumentList=response.getResults();
System.out.println("查询结果总记录数"+solrDocumentList.getNumFound());
//遍历查询结果
for(SolrDocument solrDocument:solrDocumentList){
System.out.println(solrDocument.get("id"));
System.out.println(solrDocument.get("product_name"));
System.out.println(solrDocument.get("product_price"));
System.out.println(solrDocument.get("product_catalog_name"));
System.out.println(solrDocument.get("product_picture"));
}
}
复杂查询
@Test
public void queryIndex() throws Exception{
//创建链接
SolrServer solrServer=new HttpSolrServer("http://localhost:8080/solr");
//创建一个query对象
SolrQuery query=new SolrQuery();
//设置查询条件
query.setQuery("钻石");
//过滤条件
query.setFilterQueries("product_catalog_name:幽默杂货铺");
//排序条件
query.setSort("product_price",ORDER.desc);
//分页处理
query.setStart(0);
query.setRows(10);
//结果中域的列表
query.setFields("id","product_name","product_price","product_catalog_name","product_picture");
//设置默认搜索域
query.set("df","product_keywords");
//高亮显示
query.setHighlight(true);
//高亮显示的域
query.addHighlightField("product_name");
//高亮显示的前缀
query.setHighlightSimplePost("<em>");
//高亮显示的后缀
query.setHighlightSimplePost("</em>");
//执行查询、
QueryResponse queryResponse = solrServer.query(query);
//查询结果
SolrDocumentList solrDocumentList=queryResponse.getResults();
System.out.println("共查询到商品数量:" + solrDocumentList.getNumFound());
//遍历查询的结果
for (SolrDocument solrDocument : solrDocumentList) {
System.out.println(solrDocument.get("id"));
//取高亮显示
String productName = "";
Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
List<String> list = highlighting.get(solrDocument.get("id")).get("product_name");
//判断是否有高亮内容
if (null != list) {
productName = list.get(0);
} else {
productName = (String) solrDocument.get("product_name");
}
System.out.println(productName);
System.out.println(solrDocument.get("product_price"));
System.out.println(solrDocument.get("product_catalog_name"));
System.out.println(solrDocument.get("product_picture"));
}
}