Spring Data for Apache Solr

183 阅读1分钟
  1. 添加依赖

    <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-solr</artifactId>
            </dependency>
    </dependencies>
    
  2. 编写实体类(省略了getset)

    @SolrDocument(collection = "testcore")
    public class Menu {
        @Id
        @Field("id")
        private Long menu_id;
    
        @Field("myfield")
        private String menu_name;
    }
    
  3. 编写springboot入口类并启动

    @SpringBootApplication
    public class SpringDataSolrApp {
        public static void main(String[] args) {
            SpringApplication.run(SpringDataSolrApp.class,args);
       }
    }
    
  4. 编写测试方法

    @SpringBootTest(classes = SpringDataSolrApp.class)
    @RunWith(SpringRunner.class)
    public class TestSpringdataSolr {
    
        @Autowired
        private SolrTemplate solrTemplate;
    
        private String coreName = "testcore";
    
        @Test
        public void testUpdate() {
            SolrInputDocument document = new SolrInputDocument();
    
            document.addField("id", 10010);
            document.addField("myfield", "中国联通");
    
            UpdateResponse updateResponse = solrTemplate.saveDocument(coreName, document);
    
            System.out.println(updateResponse.getStatus() == 0 ? "保存成功" : "保存失败");
    
            solrTemplate.commit(coreName);
        }
    
        @Test
        public void testDelete(){
            //根据id 删除
            UpdateResponse updateResponse = solrTemplate.deleteByIds(coreName, "2000");
            System.out.println(updateResponse.getStatus() == 0 ? "删除成功" : "删除失败");
    
            // 根据条件删除
            Query query = new SimpleQuery();
            query.addCriteria(Criteria.where("myfield").is("系统"));
            UpdateResponse updateResponse1 = solrTemplate.delete(coreName, query);
            System.out.println(updateResponse1.getStatus() == 0 ? "删除成功" : "删除失败");
    
            solrTemplate.commit(coreName);
        }
    
        @Test
        public void query(){
    
            // 分页条件
            Query query = new SimpleQuery();
            query.addCriteria(Criteria.where("myfield").is("管理"));
            // 从哪条开始查询 & 每页数据条数
            query.setOffset(0L);
            query.setRows(3);
            // 降序
            query.addSort(Sort.by(Sort.Direction.DESC,"id"));
    
            Page<Menu> pages = solrTemplate.query(coreName, query, Menu.class);
            List<Menu> menus = pages.getContent();
    
            for (Menu menu : menus) {
                System.out.println(menu);
            }
        }
    
        @Test
        public void testHighLighting(){
    
            HighlightQuery query = new SimpleHighlightQuery();
    
            query.addCriteria(Criteria.where("myfield").is("菜单"));
    
            HighlightOptions options = new HighlightOptions();
            options.addField("myfield");
            options.setSimplePostfix("<span style='color:red'>");
            options.setSimplePostfix("</span>");
    
            query.setHighlightOptions(options);
    
            // 用户存储高亮数据
            List<Menu> result =new ArrayList<>();
    
            HighlightPage<Menu> menus = solrTemplate.queryForHighlightPage(coreName, query, Menu.class);
    
            // 获取处理高亮的对象
            List<HighlightEntry<Menu>> highlighted = menus.getHighlighted();
            for (HighlightEntry<Menu> menuHighlightEntry : highlighted) {
                // 没有高亮的数据
                Menu entity = menuHighlightEntry.getEntity();
    
                // 高亮数据
                List<HighlightEntry.Highlight> highlights = menuHighlightEntry.getHighlights();
                for (HighlightEntry.Highlight highlight : highlights) {
                    String hlresult = highlight.getSnipplets().get(0);
                    entity.setMenu_name(hlresult);
                    System.out.println(entity);
                    result.add(entity);
                }
            }
            for (Menu menu : result) {
                System.out.println(menu);
            }
    
        }