`

二十六、solr的基本使用

 
阅读更多

public class Message {
    private String id;
    private String title;
    private String[] content;
   
   
    public Message() {
        super();
    }

    public Message(String id, String title, String[] content) {
        super();
        this.id = id;
        this.title = title;
        this.content = content;
    }

    public String getId() {
        return id;
    }
   
    @Field
    public void setId(String id) {
        this.id = id;
    }
    public String getTitle() {
        return title;
    }
   

     //使用solr的注解
    @Field("msg_title")
    public void setTitle(String title) {
        this.title = title;
    }
    public String[] getContent() {
        return content;
    }
   
    @Field("msg_content")
    public void setContent(String[] content) {
        this.content = content;
    }
}



public class SolrTest {
    private final static String        URL        = "http://localhost:8080/solr";
    private CommonsHttpSolrServer    server    = null;
   
    @Before
    public void init() {
        try {
            server = new CommonsHttpSolrServer(URL);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }
   
    @Test
    public void test01() {
        try {
            SolrInputDocument doc = new SolrInputDocument();
            //id是唯一的主键,当多次添加的时候,最后添加的相同id的域会覆盖前面的域
            doc.addField("id", "1");

               //具体的Field需要在schema.xml文件中通过field标签定义,并且定义好分词器
            doc.addField("msg_title", "这是我的第一个solrj的程序");
            doc.addField("msg_content", "我的solrj的程序究竟能不能跑得起来呢?");
            server.add(doc);
            server.commit();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (SolrServerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
   
    @Test
    public void test02() {
        try {
            List<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
            SolrInputDocument doc = new SolrInputDocument();
            doc.addField("id", "2");
            doc.addField("msg_title", "很好!solr可以工作了");
            doc.addField("msg_content", "slor总算可以正式工作了");
            docs.add(doc);
            doc = new SolrInputDocument();
            doc.addField("id", "3");
            doc.addField("msg_title", "测试一下solr的添加");
            doc.addField("msg_content", "看看能不能添加一个列表信息");
            docs.add(doc);
            server.add(docs);
            server.commit();
        } catch (SolrServerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
   
    @Test
    public void test03() {
        try {
            List<Message> msgs = new ArrayList<Message>();
            msgs.add(new Message("4", "基于java bean的添加", new String[] { "通过java bean完成添加",
                    "java bean的添加附件" }));

               //添加的域如果是个数组,需要将schema.xml中 field的mutilValue设置成true
            msgs.add(new Message("5", "基于java bean的列表数据的添加", new String[] { "测试如何通过一个对象完成添加",
                    "通过对象完成添加的附件" }));
            server.addBeans(msgs);
            server.commit();
        } catch (SolrServerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
   
    @Test
    public void test04() {
        try {
            //定义查询字符串
            SolrQuery query = new SolrQuery("*");

               //分页
            query.setStart(0);
            query.setRows(3);
            QueryResponse resp = server.query(query);
            //查询出来的结果都保存在SolrDocumentList中
            SolrDocumentList sdl = resp.getResults();
            System.out.println(sdl.getNumFound());
            for (SolrDocument sd : sdl) {
                //                System.out.println(sd);
                System.out.println(sd.getFieldValue("msg_title") + ","
                                    + sd.getFieldValue("msg_content"));
            }
        } catch (SolrServerException e) {
            e.printStackTrace();
        }
    }
   
    @Test
    public void test05() {
        try {
            SolrQuery query = new SolrQuery("*");
            query.setStart(0);
            query.setRows(3);
            QueryResponse resp = server.query(query);
            //可以直接查询相应的bean对象,但是不是很常用
            List<Message> list = resp.getBeans(Message.class);
            System.out.println(list.size());
            for (Message msg : list) {
                System.out.println(msg.getTitle());
            }
        } catch (SolrServerException e) {
            e.printStackTrace();
        }
    }
   
    @Test
    public void test06() {
        try {
            SolrQuery query = new SolrQuery("测试");
            query.setHighlight(true).setHighlightSimplePre("<span class='highligter'>")
                .setHighlightSimplePost("</span>").setStart(0).setRows(5);

            //设置哪些字段高亮
            query.setParam("hl.fl", "msg_title,msg_content");
            QueryResponse resp = server.query(query);
            //查询出来的结果都保存在SolrDocumentList中
            SolrDocumentList sdl = resp.getResults();
            System.out.println(sdl.getNumFound());
            for (SolrDocument sd : sdl) {
                String id = (String) sd.getFieldValue("id");

                    //取出高亮字段
                System.out.println(resp.getHighlighting().get(id).get("msg_content"));
            }
        } catch (SolrServerException e) {
            e.printStackTrace();
        }
    }
}

分享到:
评论

相关推荐

    solr6.5英文版操作说明文档

    #### 二、Apache Solr 介绍 - **定义**:Apache Solr 是一个开源的搜索平台,提供了高性能的全文检索功能。 - **获取方式**:用户可以从 Solr 官方网站 http://lucene.apache.org/solr/ 下载 Apache Solr。 #### 三...

    apache-solr-ref-guide-7.4(官方英文-文字版本)

    4. **安装 Solr**:提供了详细的安装指南,包括从源代码编译安装到使用二进制包安装等多种方式。 #### 七、部署和运维(Deployment and Operations) 1. **Solr 控制脚本参考**:详细介绍了用于管理和控制 Solr ...

    图解Solr5.3.1与MySQL配置【原创】

    #### 二、Solr核(Core)的概念与创建 **核(Core)** 是Solr的一个基本单元,每个核都可以拥有自己的配置文件和索引数据。创建核的过程如下: 1. **创建核文件夹**:在Solr的工作目录下手动创建一个名为`test`的...

    solr入门指南

    - 通过本指南的学习,读者将掌握 Solr 的基本概念和使用方法,为后续深入学习打下坚实的基础。 - Solr 不仅是一个强大的全文搜索引擎,而且具有高度的灵活性和扩展性,适合各种规模的企业应用。 - 对于初学者来说,...

    Apache Solr Beginner's Guide

    #### 二、Solr 的主要特点 - **高性能**:Solr 支持高并发查询,能够处理大量的数据。 - **易用性**:提供了丰富的 API 和用户界面,方便开发者进行集成和管理。 - **灵活性**:支持多种数据格式和索引方式,可以...

    Apache-Solr-Reference-Guide-v3.5

    #### 六、索引与基本数据操作 1. **索引过程** - **文档索引**:将文档添加到索引中。 - **提交索引更改**:使用“commit”命令将更改保存到索引中。 - **优化索引**:使用“optimize”命令合并段,减少索引文件...

    搭建nutch开发环境步骤

    **步骤九:使用Solr或Elasticsearch建立索引** Nutch可以与Solr或Elasticsearch集成,用于存储和搜索生成的索引。安装Solr或Elasticsearch,并配置Nutch的相关配置,如`solrserver.url`或`elasticsearch.nodes`。 *...

    java面试时常问的电商问题

    #### 十三、Solr搜索结果优化 - **优化策略**: 通过设置boost值调整索引字段的重要性,从而影响搜索结果的排序,使更相关的结果排在前面。 #### 十四、ActiveMQ在项目中的应用 - **应用场景**: 在商品添加或修改...

    Lucene in Action英文版

    #### 二、Lucene的应用架构与基本API - **通用搜索应用架构**: - **索引构建**:首先需要将数据转化为Lucene可以处理的格式,并建立索引。 - **查询与检索**:用户通过输入关键词等方式进行查询,系统返回匹配的...

    Eclipse开发分布式商城系统+完整视频代码及文档

    │ 淘淘商城第十二天笔记.docx │ ├─补充1:拔高课程(Redis3.0持久化、集群、MySQL5.6优化、Tomcat7优化) │ │ 打开必读.txt │ │ │ ├─课前资料 │ │ ├─MySQL5.6优化 │ │ │ MySql5.6性能优化.docx ...

    hbase原理和设计

    4. **HBase集成其他索引系统**:例如使用Apache Phoenix提供的SQL层或Apache Solr作为索引引擎。 #### 五、RowKey设计原则 有效的RowKey设计对于HBase的性能至关重要。良好的RowKey设计可以减少热点问题,提高查询...

    Play Framework Cookbook(PlayFramework )(September 4, 2011)

    - **实现方法**:通过Play Framework 的HTTP客户端工具进行API调用,并使用错误处理机制确保在API暂时不可用时仍能提供基本服务。 #### 五、添加自定义监控点 - **知识点概述**:Play Framework 允许开发者在应用...

    Lucene In Action

    3. **编写简单的索引和查询代码**:通过简单的示例代码来熟悉 Lucene 的基本使用方法。 #### 二、索引(Indexing) **索引** 是 Lucene 的核心功能之一。它是指将文档转换为可搜索的形式并存储的过程。索引过程中,...

    lucene高级搜索进阶项目_02

    除了基本的单词查询,Lucene还支持更复杂的查询类型,如PrefixQuery(前缀查询)、WildcardQuery(通配符查询)、FuzzyQuery(模糊查询)、RegexQuery(正则表达式查询)等。这些查询类型极大地扩展了搜索能力,允许...

    thymeleaf_3.0.5_中文参考手册

    #### 二十、附录 C:标记选择器语法 以上概述了 Thymeleaf 3.0.5 中文参考手册的主要内容,从基础的概念介绍到高级功能的应用,涵盖了 Thymeleaf 的各个方面。这对于想要深入了解 Thymeleaf 并将其应用于实际项目中...

Global site tag (gtag.js) - Google Analytics