详解java整合solr5.0之solrj的使用

时间:2022-10-15 22:28:44

1、首先导入solrj需要的的架包

详解java整合solr5.0之solrj的使用

2、需要注意的是低版本是solr是使用solrserver进行url实例的,5.0之后已经使用solrclient替代这个类了,在添加之后首先我们需要根据schema.xml配置一下我们的分词器

详解java整合solr5.0之solrj的使用

这里的msg_all还需要在schema.xml中配置

详解java整合solr5.0之solrj的使用

它的主要作用是将msg_title,msg_content两个域的值拷贝到msg_all域中,我们在搜索的时候可以只搜索这个msg_all域就可以了,

solr默认搜索需要带上域,比如

详解java整合solr5.0之solrj的使用

solr更改默认搜索域的地方也在schema.xml,它默认是搜索text域的,但是5.0之后不在这里配置默认搜索域了,它的文档也告诉我们,在solrconfig.xml中配置

详解java整合solr5.0之solrj的使用

在solrconfig.xml中配置默认搜素域,这样我们就可以按照我们自己的域进行搜索了

详解java整合solr5.0之solrj的使用

 配置好以上,就可以使用代码进行curd

?
1
2
3
4
5
6
7
private final static string url="http://localhost:8080/solr/java";
  public solrclient server=null;
  
  @before
  public void init() throws exception{
    server=new httpsolrclient(url);
  }

删除所有分词

?
1
2
3
4
5
6
//删除所有分词
  @test
  public void testdel() throws exception{
    server.deletebyquery("*:*");
    server.commit();//先删除 基于query的删除 会删除所有建立的索引文件
  }

增加分词

?
1
2
3
4
5
6
7
8
9
@test
  public void testadd() throws exception{
    solrinputdocument doc=new solrinputdocument();
    doc.addfield("id", "3");
    doc.addfield("msg_title", "新浪微博");
    doc.addfield("msg_content", "我有一个微博帐号名字叫做什么呢?");
    server.add(doc);
    server.commit();
  }

基于bean增加分词

?
1
2
3
4
5
6
7
8
@test
  public void test03() throws exception{
    list<message> msgs=new arraylist<message>();
    msgs.add(new message("4", "第四个测试solr测试文件", new string[]{"*万岁","中华上下五千年那年"}));
    msgs.add(new message("5", "第5个好朋友是什么意思呢?", new string[]{"上海是个好地方","歌唱我们亲爱的祖国曾经走过千山万水"}));
    server.addbeans(msgs);
    server.commit();
  }

查询结果

?
1
2
3
4
5
6
7
8
9
10
11
12
13
@test
  public void test04() throws exception{
    //定义查询内容 * 代表查询所有  这个是基于结果集
     solrquery query = new solrquery("solr");
     query.setstart(0);//起始页
     query.setrows(3);//每页显示数量
     queryresponse rsp = server.query( query );
     solrdocumentlist results = rsp.getresults();
     system.out.println(results.getnumfound());//查询总条数
     for(solrdocument doc:results){
       system.out.println(doc);
     }
  }

将查询结果集封装为对象bean

?
1
2
3
4
5
6
7
8
9
@test
  public void test05() throws exception{
     solrquery query = new solrquery("中华");// * 号 是查询 所有的数据
     queryresponse rsp = server.query( query );
     list<message> beans = rsp.getbeans(message.class);//这个不能获取查询的总数了 也不能高亮
     for(message message:beans){
       system.out.println(message.tostring());
     }
  }

将结果集高亮显示

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@test
  public void test06() throws exception{
    //定义查询内容 * 代表查询所有  这个是基于结果集
     solrquery query = new solrquery("solr");
     query.setstart(0);//起始页
     query.setrows(5);//每页显示数量
     query.setparam("hl.fl", "msg_title,msg_content");//设置哪些字段域会高亮显示
     query.sethighlight(true).sethighlightsimplepre("<span class='hight'>")
     .sethighlightsimplepost("</span>");
     
     queryresponse rsp = server.query( query );
     solrdocumentlist results = rsp.getresults();
     system.out.println(results.getnumfound());//查询总条数
     for(solrdocument doc:results){
       string id = (string) doc.getfieldvalue("id"); //id is the uniquekey field
       if(rsp.gethighlighting().get(id)!=null){
         //高亮必须要求存储 不存储的话 没法添加高亮
         system.out.println(rsp.gethighlighting().get(id).get("msg_title"));
       }
     }
  }

ok,solr的基本使用就完成了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:http://www.cnblogs.com/gyjx2016/p/5925163.html