//先创建一个实体,省略get, set 方法
public class Project{
@Field(value = "id")
private String id;
@Field(value = "title")
private String title;
@Field(value = "description")
private String description;
@Field(value = "number")
private String number;
}
// 指定solr服务器的地址
private final static String SOLR_URL = "http://localhost:8180/solr/";
/**
* 创建SolrServer对象
* <p>
* 该对象有两个可以使用,都是线程安全的
* 1、CommonsHttpSolrServer:启动web服务器使用的,通过http请求的
* 2、 EmbeddedSolrServer:内嵌式的,导入solr的jar包就可以使用了
* 3、solr 4.0之后好像添加了不少东西,其中CommonsHttpSolrServer这个类改名为HttpSolrClient
*
* @return
*/
public static SolrClient createSolrServer(String core) {
SolrClient solr = new HttpSolrClient.Builder(SOLR_URL + core)
.withConnectionTimeout(10000)
.withSocketTimeout(1000).build();
return solr;
}
public static void solrQueryTest(String core) {
SolrClient solrClient = createSolrServer(core);
SolrQuery query = new SolrQuery();
query.add("q", "*:*"); // 查询的
query.addFilterQuery("title:测试"); // 通过某个功能呢过滤
// solrQuery.addFilterQuery("id:[10000004119 TO 10000004128]"); // 查询的筛选条件, 限定一定范围
query.addField("id")
.addField("title")
.addField("description")
.addField("number")
.setSort("id", SolrQuery.ORDER.desc) // 排序
.setRows(10); // 显示的行
//参数hl,设置高亮
// query.setHighlight(true);
// //设置高亮的字段
// query.addHighlightField("title");
// //设置高亮的样式
// query.setHighlightSimplePre("<font color='red'>");
try {
QueryResponse response = solrClient.query(query);
SolrDocumentList documents = response.getResults();
long numFound = documents.getNumFound();
System.out.println(numFound);
for (SolrDocument item : documents) {
Object id = item.getFieldValue("id");
String title = (String) item.getFieldValue("title");
String description = (String) item.getFieldValue("description");
String number = (String) item.getFirstValue("number");
System.out.println("id:" + id + " title:" + title + " description: " + description + " number:" + number);
}
System.out.println("**********************************");
// 搜索的结果转换成实体
List<Project> beans = response.getBeans(Project.class);
for (Project item : beans) {
System.out.println("id:" + item.getId() + " title:" + item.getTitle() + " description: " + item.getDescription() + " number:" + item.getNumber());
}
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
SolrQuery sq=new SolrQuery();
1、多条件查询
//设置查询条件
sq.set("q","item_title:3 AND item_desc:东西 OR item_sell_point:好看" );
2、设置过滤条件
//设置过滤条件 sq.set("fq", "item_price:[1 TO 20]");
3、设置排序
//设置排序
sq.addSort("item_title", ORDER.desc);
4、设置分页
//设置分页
sq.setStart(0);//开始位置 sq.setRows(3);//每页3条
public static void queryDocument() throws Exception{
//创建Solr的客户端链接对象
HttpSolrServer solrServer=new HttpSolrServer("http://192.168.6.179:8080/solr/collection1");
//创建solr的查询对象
SolrQuery sq=new SolrQuery();
//设置查询条件
sq.set("q","item_title:商品" );
//设置过滤条件
// sq.set("fq", "item_price:[1 TO 20]");
//设置排序
sq.addSort("item_title", ORDER.desc);
//设置分页
sq.setStart(0);//开始位置
sq.setRows(3);//每页3条
//开启高亮
sq.setHighlight(true);
sq.addHighlightField("item_title");//设置高亮域
sq.setHighlightSimplePre("<b>");//设置高亮样式
sq.setHighlightSimplePost("</b>");
//查询
QueryResponse qr=solrServer.query(sq);
//获取查询结果
SolrDocumentList sds=qr.getResults();
//获取查询的记录数
long total=sds.getNumFound();
System.out.println("数量:"+total);
for(SolrDocument sd:sds){//默认取出10条记录
String id=(String) sd.getFieldValue("id");
String item_title=(String) sd.getFieldValue("item_title");
String item_sell_point=(String) sd.getFieldValue("item_sell_point");
long item_price=(Long) sd.getFieldValue("item_price");
String item_desc=(String) sd.getFieldValue("item_desc");
String item_image=(String) sd.getFieldValue("item_image");
String item_category_name=(String) sd.getFieldValue("item_category_name");
System.out.println("========================================");
System.out.println("id:"+id);
System.out.println("item_title:"+item_title);
System.out.println("item_sell_point:"+item_sell_point);
System.out.println("item_price:"+item_price);
System.out.println("item_desc:"+item_desc);
System.out.println("item_image:"+item_image);
System.out.println("item_category_name:"+item_category_name);
//获取高亮显示的结构
Map<String, Map<String, List<String>>> highlighting=qr.getHighlighting();
if(highlighting!=null){
//根据Id获得每个域的高亮内容
Map<String, List<String>> map=highlighting.get(id);
//根据具体的域获取高亮内容
List<String> list=map.get("item_title");
if(list!=null && !list.isEmpty()){
for(String str:list){
System.out.println("str:"+str);
}
}
}
}
}
/**
* 添加
* @param core
*/
public static void addDocument(String core) {
SolrClient solrClient = createSolrServer(core);
List<Project> projects = new ArrayList<Project>();
Project project = new Project();
project.setId("1");
project.setTitle("大数据处理权威指南");
project.setDescription("清华大学出版社");
project.setNumber("1633");
projects.add(project);
Project project2 = new Project();
project2.setId("2");
project2.setTitle("深入RabbitMq");
project2.setDescription("第二版");
project2.setNumber("1634");
projects.add(project2);
try {
solrClient.addBeans(projects);
solrClient.commit();
solrClient.close();
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 删除
* @param core
*/
public static void delDocument(String core) {
SolrClient solrClient = createSolrServer(core);
try {
solrClient.deleteById("2");
solrClient.commit();
solrClient.commit();
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 更新
* @param core
*/
public static void updDocument(String core) {
SolrClient solrClient = createSolrServer(core);
Project project = new Project();
project.setId("1"); // 有id 就是更新, 没有ID,就是添加
project.setTitle("大数据处理权威指南22");
project.setDescription("清华大学出版社");
project.setNumber("1633");
try {
UpdateResponse updateResponse = solrClient.addBean(project);
solrClient.commit();
} catch (IOException e) {
e.printStackTrace();
} catch (SolrServerException e) {
e.printStackTrace();
}
}