zoukankan      html  css  js  c++  java
  • 向solr索引库添加数据

    一.

    写一个测试用例:
    向索引库添加文档(数据)
    创建一个SolrServer对象。创建一个HttpSolrServer对象
    需要指定solr服务的url
    创建一个文档对象SolrInputDocument
    向文档中添加域,必须有id域,域的名称必须在schema.xml中定义
    把文档对象写入索引库
    提交
    @Test
        public void testAddDocument() throws Exception {
            //创建一个SolrServer对象。创建一个HttpSolrServer对象
            //需要指定solr服务的url
            SolrServer solrServer = new HttpSolrServer("http://192.168.0.128:8080/solr/collection1");
            //创建一个文档对象SolrInputDocument
            SolrInputDocument document = new SolrInputDocument();
            //向文档中添加域,必须有id域,域的名称必须在schema.xml中定义
            document.addField("id", "1234");
            document.addField("item_title", "测试商品34");
            document.addField("item_price", 1000);
            //把文档对象写入索引库
            solrServer.add(document);
            //提交
            solrServer.commit();
        }
        @Test
        public void deleteDocumentById() throws Exception {
            SolrServer solrServer = new HttpSolrServer("http://192.168.0.128:8080/solr/collection1");
            solrServer.deleteById("1234");
            //提交
            solrServer.commit();
        }
     
        @Test
        public void deleteDocumentByQuery() throws Exception {
            SolrServer solrServer = new HttpSolrServer("http://192.168.0.128:8080/solr/collection1");
            solrServer.deleteByQuery("item_title:测试商品3");
            solrServer.deleteByQuery("*:*");
            solrServer.commit();
        }
    二.往索引库循环写数据
    SolrServer solrServer=new HttpSolrServer("http://192.168.0.128:8080/solr/collection1");
    try {
         //1、先查询所有商品数据
         List<SearchItem> itemList = this.searchItemDao.getItemList();
         //2、遍历商品数据添加到索引库
         for (SearchItem searchItem : itemList) {
             //创建文档对象
             SolrInputDocument document = new SolrInputDocument();
             //向文档中添加域
             document.addField("id", searchItem.getId());
             document.addField("item_title", searchItem.getTitle());
             document.addField("item_sell_point", searchItem.getSell_point());
             document.addField("item_price", searchItem.getPrice());
             document.addField("item_image", searchItem.getImage());
             document.addField("item_category_name", searchItem.getCategory_name());
             document.addField("item_desc", searchItem.getItem_desc());
             //把文档写入索引库
             solrServer.add(document);
         }
         //3、提交
         solrServer.commit();
         System.out.println("success");
         a=1;
    } catch (Exception e) {
         e.printStackTrace();
    }
    三.出现错误:java异常 java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
    原因:错误的原因是因为缺少slf4j日志组件jar包造成的,slf4j是一个开源的日志组件,和log4j类似,都是用来记录日志的开源组件。
        SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。
        实际上,SLF4J所提供的核心API是一些接口以及一个LoggerFactory的工厂类。从某种程度上,SLF4J有点类似JDBC,不过比JDBC更简单,在JDBC中,你需要指定驱动程序,而在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算使用那个具体的日志系统。如同使用JDBC基本不用考虑具体数据库一样,SLF4J提供了统一的记录日志的接口,只要按照其提供的方法记录即可,最终日志的格式、记录级别、输出方式等通过具体日志系统的配置来实现,因此可以在应用中灵活切换日志系统。
    四.解决方法:
    解决
    配置pom.xml
    <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.22</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.22</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
    <version>1.7.22</version>
    五.用solr进行结果查询
    进行结果查询:
    进行测试练习
    import org.junit.jupiter.api.Test;
     
    @Test
        public void searchDocumet() throws Exception {
            //创建一个SolrServer对象
            SolrServer solrServer = new HttpSolrServer("http://192.168.0.128:8080/solr/collection1");
            //创建一个SolrQuery对象
            SolrQuery query = new SolrQuery();
            //设置查询条件、过滤条件、分页条件、排序条件、高亮
            //query.set("q", "*:*");
            query.setQuery("手机");
            //分页条件
            query.setStart(0);
            query.setRows(10);
            //设置默认搜索域
            query.set("df", "item_keywords");
            //设置高亮
            query.setHighlight(true);
            //高亮显示的域
            query.addHighlightField("item_title");
            query.setHighlightSimplePre("<div>");
            query.setHighlightSimplePost("</div>");
            //执行查询,得到一个Response对象
            QueryResponse response = solrServer.query(query);
            //取查询结果
            SolrDocumentList solrDocumentList = response.getResults();
            //取查询结果总记录数
            System.out.println("查询结果总记录数:" + solrDocumentList.getNumFound());
            for (SolrDocument solrDocument : solrDocumentList) {
                System.out.println(solrDocument.get("id"));
                //取高亮显示
                Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
                List<String> list = highlighting.get(solrDocument.get("id")).get("item_title");
                String itemTitle = "";
                if (list != null && list.size() >0) {
                    itemTitle = list.get(0);
                } else {
                    itemTitle = (String) solrDocument.get("item_title");
                }
                System.out.println(itemTitle);
                System.out.println(solrDocument.get("item_sell_point"));
                System.out.println(solrDocument.get("item_price"));
                System.out.println(solrDocument.get("item_image"));
                System.out.println(solrDocument.get("item_category_name"));
                System.out.println("=============================================");
            }
        }
    写dao层
    写service层
    写controller层
  • 相关阅读:
    Understanding Paths in ASP.NET
    C#通过shell32来控制本地连接
    利用outlook发邮件
    角色扮演游戏引擎的设计原理[转载]
    Lvalues and Rvalues
    链接字符串里面不要加上connection timeout =0
    Winform获取当前拥有焦点的控件
    Spring 3.x jar 包详解 与 依赖关系
    Liferay环境搭建、简单说明与相关资料
    爆音(杂音)问题的推论与解决
  • 原文地址:https://www.cnblogs.com/llaq/p/9439679.html
Copyright © 2011-2022 走看看