elasticsearch 嵌套查询


elasticsearch 嵌套查询

 

********************************

相关类

 

QueryBuilders:查询构造类

public final class QueryBuilders {

    public static NestedQueryBuilder nestedQuery(String path, QueryBuilder query, ScoreMode scoreMode) {

 

ScoreMode:打分模式

public enum ScoreMode {
    None,
    Avg,
    Max,
    Total,
    Min;

    private ScoreMode() {
    }
}

 

********************************

示例

 

**************************

pojo 层

 

Student 

@Data
@Document(indexName = "student")
public class Student {

    @Id
    private Integer id;

    @Field(type = FieldType.Keyword)
    private String name;

    @Field(type = FieldType.Integer)
    private Integer age;

    @Field(type = FieldType.Nested)
    private School school;
}

 

School

@Data
@Document(indexName = "school")
public class School {

    @Id
    private Integer id;

    @Field(type = FieldType.Keyword)
    private String name;
}

 

**************************

controller 层

 

StudentController

@RestController
public class StudentController {

    @Resource
    private StudentRepository studentRepository;

    @RequestMapping("/save3")
    public String save(){
        for (int i=0;i<10;i++){
            Student student=new Student();
            student.setId(i);
            student.setName("瓜田李下 "+i);
            student.setAge(i%10+2);

            School school=new School();
            switch (i%3){
                case 0: {
                    school.setId(i);
                    school.setName("南天门");
                }   break;

                case 1: {
                    school.setId(i);
                    school.setName("北天门");
                }  break;

                case 2: {
                    school.setId(i);
                    school.setName("冬天门");
                }  break;
            }
            student.setSchool(school);

            studentRepository.save(student);
        }

        return "success";
    }

    @RequestMapping("/get5")
    public List<Student> get(){
        QueryBuilder queryBuilder= QueryBuilders.nestedQuery("school",
                QueryBuilders.termQuery("school.name","南天门"), ScoreMode.Avg);

        NativeSearchQuery nativeSearchQuery=new NativeSearchQueryBuilder().withQuery(queryBuilder).build();
        List<Student> list= studentRepository.search(nativeSearchQuery).getContent();
        list.forEach(System.out::println);

        return list;
    }

    @RequestMapping("/get6")
    public List<Student> get2(){
        QueryBuilder queryBuilder=QueryBuilders.nestedQuery("school",
                QueryBuilders.boolQuery()
                        .must(QueryBuilders.termQuery("school.name","南天门"))
                        .must(QueryBuilders.rangeQuery("school.id").gte(5)),ScoreMode.Avg);

        NativeSearchQuery nativeSearchQuery=new NativeSearchQueryBuilder().withQuery(queryBuilder).build();
        List<Student> list= studentRepository.search(nativeSearchQuery).getContent();
        list.forEach(System.out::println);

        return list;
    }
}

 

 

********************************

控制台输出

 

/get5

Student(id=3, name=瓜田李下 3, age=5, school=School(id=3, name=南天门))
Student(id=9, name=瓜田李下 9, age=11, school=School(id=9, name=南天门))
Student(id=0, name=瓜田李下 0, age=2, school=School(id=0, name=南天门))
Student(id=6, name=瓜田李下 6, age=8, school=School(id=6, name=南天门))

 

/get6

Student(id=9, name=瓜田李下 9, age=11, school=School(id=9, name=南天门))
Student(id=6, name=瓜田李下 6, age=8, school=School(id=6, name=南天门))

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值