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

 更新时间:2017年06月28日 16:39:29   作者:古越剑箫  
本篇文章主要介绍了详解java整合solr5.0之solrj的使用 ,具有一定的参考价值,有兴趣的可以了解下

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

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

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

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

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

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


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

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

private final static String URL="http://localhost:8080/solr/java";
  public SolrClient server=null;
  
  @Before
  public void init() throws Exception{
    server=new HttpSolrClient(URL);
  }

删除所有分词

//删除所有分词
  @Test
  public void testDel() throws Exception{
    server.deleteByQuery("*:*");
    server.commit();//先删除 基于query的删除 会删除所有建立的索引文件
  }

增加分词

@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增加分词

@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();
  }

查询结果

@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

@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());
     }
  }

将结果集高亮显示

@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的基本使用就完成了

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

相关文章

  • MyBatis使用级联操作解决lombok构造方法识别失败问题

    MyBatis使用级联操作解决lombok构造方法识别失败问题

    这篇文章主要介绍了MyBatis使用级联操作解决lombok构造方法识别失败问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Spring Boot 集成 Kafka的详细步骤

    Spring Boot 集成 Kafka的详细步骤

    Spring Boot与Kafka的集成使得消息队列的使用变得更加简单和高效,可以配置 Kafka、实现生产者和消费者,并利用 Spring Boot 提供的功能处理消息流,以下是 Spring Boot 集成 Kafka 的详细步骤,包括配置、生产者和消费者的实现以及一些高级特性,感兴趣的朋友一起看看吧
    2024-07-07
  • Java判断是否为闰年的方法示例

    Java判断是否为闰年的方法示例

    这篇文章主要介绍了Java判断是否为闰年的方法示例,本文直接给出示例代码,并讲解了判断原理,需要的朋友可以参考下
    2015-06-06
  • Java中实现文件上传下载的三种解决方案(推荐)

    Java中实现文件上传下载的三种解决方案(推荐)

    这篇文章主要介绍了Java中实现文件上传下载的三种解决方案的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • Spring Bean生命周期之BeanDefinition的合并过程详解

    Spring Bean生命周期之BeanDefinition的合并过程详解

    这篇文章主要为大家详细介绍了Spring Bean生命周期之BeanDefinition的合并过程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

    2022-03-03
  • Java中的Lambda表达式及其应用小结

    Java中的Lambda表达式及其应用小结

    Java中的Lambda表达式是一项极具创新性的特性,它使得Java代码更加简洁和高效,尤其是在集合操作和并行处理方面,这篇文章主要介绍了Java中的Lambda表达式及其应用,需要的朋友可以参考下
    2025-04-04
  • Java中List根据map的某个key去重的代码

    Java中List根据map的某个key去重的代码

    今天小编就为大家分享一篇关于Java中List根据map的某个key去重的代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • Java中channel用法总结

    Java中channel用法总结

    这篇文章主要介绍了Java中channel用法,较为详细的总结了channel的定义、类型及使用技巧,需要的朋友可以参考下
    2015-06-06
  • Spring-AOP 静态正则表达式方法如何匹配切面

    Spring-AOP 静态正则表达式方法如何匹配切面

    这篇文章主要介绍了Spring-AOP 静态正则表达式方法如何匹配切面的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Maven中pom.xml配置文件详细介绍

    Maven中pom.xml配置文件详细介绍

    这篇文章主要介绍了Maven中pom.xml配置文件详细介绍,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11

最新评论