11.SolrJ索引操作
创建索引
说明:根据id(唯一约束)域来更新Document的内容,如果根据id值搜索不到id域则会执行添加操作,如果找到则更新。
public void testCreateIndex() throws SolrServerException, IOException {
SolrServer solrServer = new HttpSolrServer(urlString);
SolrInputDocument document = new SolrInputDocument();
document.addField("id", "c0001");
document.addField("product_name", "传智java教程");//商品名称
document.addField("product_price", 86.5f);//商品价格
document.addField("product_picture", "382782828.jpg");//商品图片
document.addField("product_description", "这是一本深入浅出讲解java技术的书籍!");//商品描述
document.addField("product_catalog_name", "javabook");//商品分类
UpdateResponse response = solrServer.add(document);
// 提交
solrServer.commit();
}
删除索引
public void testDeleteIndex() throws SolrServerException, IOException {
SolrServer solrServer = new HttpSolrServer(urlString);
//根据id删除
UpdateResponse response = solrServer.deleteById("c0001");
//根据多个id删除
// solrServer.deleteById(ids...);
//自动查询条件删除
// solrServer.deleteByQuery("product_keywords:教程");
// 提交
solrServer.commit();
}
搜索索引
简单搜索
public void testSearch() throws SolrServerException {
SolrServer solr = new HttpSolrServer(urlString);
// 查询对象
SolrQuery query = new SolrQuery();
//设置查询条件,名称“q”是固定的且必须 的
//搜索product_keywords域,product_keywords是复制域包括product_name和product_description
query.set("q", "product_keywords:java教程");
// 请求查询
QueryResponse response = solr.query(query);
// 查询结果
SolrDocumentList docs = response.getResults();
// 查询文档总数
System.out.println("查询文档总数" + docs.getNumFound());
for (SolrDocument doc : docs) {
//商品主键
String id = (String) doc.getFieldValue("id");
//商品名称
String product_name = (String) doc.getFieldValue("product_name");
//商品价格
Float product_price = (Float) doc.getFieldValue("product_price");
//商品图片
String product_picture = (String) doc.getFieldValue("product_picture");
//商品分类
String product_catalog_name = (String) doc.getFieldValue("product_catalog_name");
System.out.println("=============================");
System.out.println(id);
System.out.println(product_name);
System.out.println(product_price);
System.out.println(product_picture);
System.out.println(product_catalog_name);
}
}
组合查询
public void testSearch2() throws SolrServerException {
SolrServer solr = new HttpSolrServer(urlString);
// 查询对象
SolrQuery query = new SolrQuery();
// 搜索product_keywords域,product_keywords是复制域包括product_name和product_description
// 设置商品分类、关键字查询
// query.set("q", "product_keywords:挂钩 AND product_catalog_name:幽默杂货");
query.setQuery("product_keywords:挂钩 AND product_catalog_name:幽默杂货");
// 设置价格范围
query.set("fq", "product_price:[1 TO 20]");
// 查询结果按照价格降序排序
// query.set("sort", "product_price desc");
query.addSort("product_price", ORDER.desc);
// 请求查询
QueryResponse response = solr.query(query);
// 查询结果
SolrDocumentList docs = response.getResults();
// 查询文档总数
System.out.println("查询文档总数" + docs.getNumFound());
for (SolrDocument doc : docs) {
// 商品主键
String id = (String) doc.getFieldValue("id");
// 商品名称
String product_name = (String) doc.getFieldValue("product_name");
// 商品价格
Float product_price = (Float) doc.getFieldValue("product_price");
// 商品图片
String product_picture = (String) doc.getFieldValue("product_picture");
// 商品分类
String product_catalog_name = (String) doc.getFieldValue("product_catalog_name");
System.out.println("=============================");
System.out.println("id=" + id);
System.out.println("product_name=" + product_name);
System.out.println("product_price=" + product_price);
System.out.println("product_picture=" + product_picture);
System.out.println("product_catalog_name=" + product_catalog_name);
}
}
分页、高亮
public void testSearch3() throws SolrServerException {
SolrServer solr = new HttpSolrServer(urlString);
// 查询对象
SolrQuery query = new SolrQuery();
// 设置商品分类、关键字查询
query.setQuery("product_keywords:透明挂钩 ");
// 分页参数
// 每页显示记录数
int pageSize = 2;
// 当前页码
int curPage = 2;
// 开始记录下标
int begin = pageSize * (curPage - 1);
// 起始下标
query.setStart(begin);
// 结束下标
query.setRows(pageSize);
// 设置高亮参数
query.setHighlight(true); // 开启高亮组件
query.addHighlightField("product_name");// 高亮字段
query.setHighlightSimplePre("<span color='red'>");// 前缀标记
query.setHighlightSimplePost("</span>");// 后缀标记
// 请求查询
QueryResponse response = solr.query(query);
// 查询结果
SolrDocumentList docs = response.getResults();
// 查询文档总数
System.out.println("查询文档总数" + docs.getNumFound());
for (SolrDocument doc : docs) {
// 商品主键
String id = (String) doc.getFieldValue("id");
// 商品名称
String product_name = (String) doc.getFieldValue("product_name");
// 商品价格
Float product_price = (Float) doc.getFieldValue("product_price");
// 商品图片
String product_picture = (String) doc.getFieldValue("product_picture");
// 商品分类
String product_catalog_name = (String) doc.getFieldValue("product_catalog_name");
System.out.println("=============================");
System.out.println("id=" + id);
System.out.println("product_name=" + product_name);
System.out.println("product_price=" + product_price);
System.out.println("product_picture=" + product_picture);
System.out.println("product_catalog_name=" + product_catalog_name);
// 高亮信息
if (response.getHighlighting() != null) {
if (response.getHighlighting().get(id) != null) {
Map<String, List<String>> map = response.getHighlighting().get(id);// 取出高亮片段
if (map.get("product_name") != null) {
for (String s : map.get("product_name")) {
System.out.println(s);
}
}
}
}
}
}