测试使用索引库crud和高级查询分页

1.搭建ES的服务
  • 导入依赖

     <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    </dependency>
  • 配置ES
    ...
    spring:
      application:
        name: hrm-es-service
      data:
        elasticsearch:
          cluster-name: elasticsearch
          cluster-nodes: 127.0.0.1:9300 #9200是图形界面端,9300代码端
          ... 
2.创建EmployeeDoc
/**
 * 针对于  Employee 表的文档映射
 * indexName:索引库
 * type:类型(表类型)
 */
@Document(indexName = "hrm" , type = "employee")
public class EmployeeDoc {
?
    //对应文档的id
    @Id
    private Long id;
?
    @Field(type = FieldType.Keyword)    //指定为 不分词
    private String userName;
?
    private int age;
?
    @Field(type =FieldType.Text,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")
    private String intr;
    ...
3.创建索引库
@RunWith(SpringRunner.class)
@SpringBootTest(classes = EsServiceApplication2050.class)
public class ESTest {
?
    @Autowired
    private ElasticsearchTemplate elasticsearchTemplate;
?
    @Test
    public void testCreateIndex() {
        //创建索引
        elasticsearchTemplate.createIndex(EmployeeDoc.class);
        //做文档映射
        elasticsearchTemplate.putMapping(EmployeeDoc.class);
    }
}
4.定义ElasticsearchRepository
@Repository
public interface EmployeeElasticsearchRepository  extends ElasticsearchRepository<EmployeeDoc,Long> {}
5.基本CRUD
@Autowired
    private EmployeeElasticsearchRepository employeeElasticsearchRepository;
?
    //初始化
    @Test
    public void testCreateIndex() {
        //创建索引
        elasticsearchTemplate.createIndex(EmployeeDoc.class);
        //做文档映射
        elasticsearchTemplate.putMapping(EmployeeDoc.class);
    }
    //添加数据
    @Test
    public void testAdd(){
?
        //准备数据
        EmployeeDoc employeeDoc = new EmployeeDoc();
        employeeDoc.setAge(18);
        employeeDoc.setUserName("王大锤");
        employeeDoc.setIntr("我爱中国");
?
        //添加数据到es
        employeeElasticsearchRepository.save(employeeDoc);
    }
?
    //添加数据
    @Test
    public void testUpdate(){
?
        //准备数据
        EmployeeDoc employeeDoc = new EmployeeDoc();
        employeeDoc.setId(5L);  //有id就是修改
        employeeDoc.setAge(18);
        employeeDoc.setUserName("周伯通");
        employeeDoc.setIntr("深得童子通真传");
?
        //添加数据到es
        employeeElasticsearchRepository.save(employeeDoc);
    }
    //删除数据
    @Test
    public void testDelete(){
        employeeElasticsearchRepository.deleteById(5L);
    }
    //获取数据
    @Test
    public void testGet(){
        Optional<EmployeeDoc> optional = employeeElasticsearchRepository.findById(5L);
        System.out.println(optional.get());
    }
6.高级查询分页
    
//通过索引库,高级查询和分页
    /**
     * 用户名为  隔壁老王
     * age在 10 - 20
     * 按照 id排序降序
     * 分页 每页 2条 取第一页
     */
    @Test
    public void testSearchAndPage() throws Exception{
        //1.创建查询建造器对象
        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
?
        //2.给查询建造器添加查询条件对象
            //1.创建组合查询条件对象
        BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
            //2.添加查询条件:分词查询:username
        List<QueryBuilder> must= boolQuery.must();
        must.add(QueryBuilders.matchQuery("username","周伯通" ));
            //2.添加查询条件:范围查询:age:10到30
        List<QueryBuilder> filter = boolQuery.filter();
        filter.add(QueryBuilders.rangeQuery("age").lte(30).gte(10));
            //3.给查询建造器添加查询条件对象
        queryBuilder.withQuery(boolQuery);
?
        //3.给查询建造器添加分页对象:从第0页开始,每页2条
        queryBuilder.withPageable(PageRequest.of(0,2 ));
?
        //4.给查询建造器添加排序
            //1.创建排序对象:id,降序
        FieldSortBuilder sortBuilder = new FieldSortBuilder("id").order(SortOrder.DESC);
            //2.给查询建造器添加排序
        queryBuilder.withSort(sortBuilder);
?
        //5.创建查询对象
        NativeSearchQuery searchQuery = queryBuilder.build();
?
        //6.传给search方法,执行高级查询分页排序功能,得到分页对象
        Page<EmployeeDoc> page = employeeElasticsearchRepository.search(searchQuery);
?
        //7.获取结果
            //获得总条数
        int totalPages = page.getTotalPages();
        System.out.println(totalPages);
            //获得当前页数据
        Iterator<EmployeeDoc> iterator = page.getContent().iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
 

原文地址:https://www.cnblogs.com/htq29study/p/11617266.html

时间: 2024-10-28 23:37:06

测试使用索引库crud和高级查询分页的相关文章

全文检索之lucene的优化篇--创建索引库

在上一篇HelloWorld的基础上,建立一个directory的包,添加一个DirectoryTest的测试类,用来根据指定的索引目录创建目录存放指引. DirectoryTest类中的代码如下,基本上就是在HelloWorld的基础上改改就可以了. 里面一共三个方法,testDirectory(),测试创建索引库;testDirectoryFSAndRAM(),结合方法1的两种创建方式,优化;testDirectoryOptimize(),在方法2个基础上,研究索引的优化创建,减少创建的索引

JAVAEE——宜立方商城07:Linux上搭建Solr服务、数据库导入索引库、搜索功能的实现

1. 学习计划 1.Solr服务搭建 2.Solrj使用测试 3.把数据库中的数据导入索引库 4.搜索功能的实现 2. Solr服务搭建 2.1. Solr的环境 Solr是java开发. 需要安装jdk. 安装环境Linux. 需要安装Tomcat. 2.2. 搭建步骤 第一步:把solr 的压缩包上传到Linux系统 第二步:解压solr. 第三步:安装Tomcat,解压缩即可. 第四步:把solr部署到Tomcat下. 第五步:解压缩war包.启动Tomcat解压. tail -f ../

lucene内存索引库、分词器

内存索引库 特点 在内存中开辟一块空间,专门为索引库存放.这样有以下几个特征: 1)    因为索引库在内存中,所以访问速度更快. 2)    在程序退出时,索引库中的文件也相应的消失了. 3)    如果索引库比较大,必须得保证足够多的内存空间. 编码 在cn.hqu.directory 下新建:DirectoryTest /** * 1.能不能设置很多个索引库 *    可以设置很多个索引库 * 2.索引库能不能合并起来 *    如果是内存索引库 *      Directory ramD

(转)淘淘商城系列——使用solrj来测试索引库

http://blog.csdn.net/yerenyuan_pku/article/details/72892280 我们使用solrj来操作索引库,一般习惯先建一个单元测试类测试下增删改查方法是否好使,这样可以大大减少出错概率,提升开发效率. 我们的taotao-search-service工程还没有添加对solrj的依赖,因此需要先添加对solrj的依赖,在taotao-search-service工程的pom.xml文件当中添加如下依赖(之所以不用写版本号是因为在taotao-paren

mongoDB高级查询与索引

整理来自 https://www.shiyanlou.com/courses/running/78 覆盖索引查询 所有的查询字段都是索引的一部分:所有的查询返回字段在同一个索引中. 由于索引存在于RAM中,因而从索引中获取数据要比扫面文档更快 范例:创建如下users集合(使用前面所学的方法创建该集合): { "contact": "987654321", "dob": "01-01-1991", "gender&q

【Solr】索引库查询界面详解

目录 索引库查询界面详解 回到顶部 索引库查询界面详解 q:主查询条件.完全支持lucene语法.还进行了扩展. fq:过滤查询.是在主查询条件查询结果的基础上进行过滤.例如:product_price:[10 TO 20] sort:排序条件.排序的域asc.如果有多个排序条件使用半角逗号分隔. start, rows:分页处理.Start起始记录rows每页显示的记录条数. fl:返回结果中域的列表.使用半角逗号分隔. df:默认搜索域. wt:响应结果的数据格式,可以是json.xml等.

JAVAEE——Solr:安装及配置、后台管理索引库、 使用SolrJ管理索引库、仿京东的电商搜索案例实现

1 学习回顾 1. Lucene  是Apache开源的全文检索的工具包 创建索引 查询索引 2. 遇到问题? 文件名 及文件内容  顺序扫描法  全文检索 3. 什么是全文检索? 这种先创建索引 再对索引进行搜索的过程叫全文检索 4. 索引是什么? 非结构数据中提取一个数据.并重新组合的过程叫索引 5. Lucene实现 6. 入门程序 磁盘文件为原始文件 创建索引 第一步:获取文件 第二步:创建文档对象 第三步:创建分析器 第四步:保存索引及文档到索引库 搜索索引 第一步:用户接口(百度)

MongoDB高级查询用法

译 MongoDB高级查询用法 2018年09月04日 18:52:43 小小小辉happy 阅读数 752更多 分类专栏: 数据库 db的帮助文档 输入:db.help(); db.AddUser(username,password[, readOnly=false])  添加用户 db.auth(usrename,password)     设置数据库连接验证 db.cloneDataBase(fromhost)     从目标服务器克隆一个数据库 db.commandHelp(name)

2.Lucene3.6.2包介绍,第一个Lucene案例介绍,查看索引信息的工具lukeall介绍,Luke查看的索引库内容,索引查找过程

 1  Lucen目录介绍 2  lucene-core-3.6.2.jar是lucene开发核心jar包 contrib  目录存放,包含一些扩展jar包 3  案例 建立第一个Lucene项目:lucene3_day1 (1)需要先将数据转换成为Document对象,每一个数据信息转换成为Field(String name, String value, Field.Store store, Field.Indexindex) (2)指定索引库位置Directorydirectory =