0
点赞
收藏
分享

微信扫一扫

Spring data Jpa操作ES

郝春妮 2022-02-08 阅读 57

以下是使用Spring data Jpa操作ES的一些记录

在ElasticsearchRepository中我们可以使用Not Add Like Or Between等关键词自动创建查询语句。

记住上面这句话,代码示例:

public interface EmployeeRepository extends ElasticsearchRepository<Employee, String> {
 
    /**
     * 通过ID字段查询
     */
    Employee queryEmployeeById(String id);
 
}

打开这个类我们发现:

@NoRepositoryBean
public interface ElasticsearchRepository<T, ID extends Serializable> extends ElasticsearchCrudRepository<T, ID> {
    <S extends T> S index(S var1);
 
    Iterable<T> search(QueryBuilder var1);
 
    Page<T> search(QueryBuilder var1, Pageable var2);
 
    Page<T> search(SearchQuery var1);
 
    Page<T> searchSimilar(T var1, String[] var2, Pageable var3);
 
    void refresh();
 
    Class<T> getEntityClass();
}

那么具体关键字有哪些呢?下面一一列出:

关键字 使用示例 等同于的ES查询

关键字使用示例等同于的ES查询
AndfindByNameAndPrice{“bool” : {“must” : [ {“field” : {“name” : “?”}}, {“field” : {“price” : “?”}} ]}}
OrfindByNameOrPrice{“bool” : {“should” : [ {“field” : {“name” : “?”}}, {“field” : {“price” : “?”}} ]}}
IsfindByName{“bool” : {“must” : {“field” : {“name” : “?”}}}}
NotfindByNameNot{“bool” : {“must_not” : {“field” : {“name” : “?”}}}}
BetweenfindByPriceBetween{“bool” : {“must” : {“range” : {“price” : {“from” : ?,”to” : ?,”include_lower” : true,”include_upper” : true}}}}}
LessThanEqualfindByPriceLessThan{“bool” : {“must” : {“range” : {“price” : {“from” : null,”to” : ?,”include_lower” : true,”include_upper” : true}}}}}
GreaterThanEqualfindByPriceGreaterThan{“bool” : {“must” : {“range” : {“price” : {“from” : ?,”to” : null,”include_lower” : true,”include_upper” : true}}}}}
BeforefindByPriceBefore{“bool” : {“must” : {“range” : {“price” : {“from” : null,”to” : ?,”include_lower” : true,”include_upper” : true}}}}}
AfterfindByPriceAfter{“bool” : {“must” : {“range” : {“price” : {“from” : ?,”to” : null,”include_lower” : true,”include_upper” : true}}}}}
LikefindByNameLike{“bool” : {“must” : {“field” : {“name” : {“query” : “? *”,”analyze_wildcard” : true}}}}}
StartingWithfindByNameStartingWith{“bool” : {“must” : {“field” : {“name” : {“query” : “? *”,”analyze_wildcard” : true}}}}}
EndingWithfindByNameEndingWith{“bool” : {“must” : {“field” : {“name” : {“query” : “*?”,”analyze_wildcard” : true}}}}}
Contains/ContainingfindByNameContaining{“bool” : {“must” : {“field” : {“name” : {“query” : “?”,”analyze_wildcard” : true}}}}}
InfindByNameIn(Collectionnames){“bool” : {“must” : {“bool” : {“should” : [ {“field” : {“name” : “?”}}, {“field” : {“name” : “?”}} ]}}}}
NotInfindByNameNotIn(Collectionnames){“bool” : {“must_not” : {“bool” : {“should” : {“field” : {“name” : “?”}}}}}}
TruefindByAvailableTrue{“bool” : {“must” : {“field” : {“available” : true}}}}
FalsefindByAvailableFalse{“bool” : {“must” : {“field” : {“available” : false}}}}
OrderByfindByAvailableTrueOrderByNameDesc{“sort” : [{ “name” : {“order” : “desc”} }],”bool” : {“must” : {“field” : {“available” : true}}}}

那么通过上述我们就可以写出一个简单的例子:

	@Autowired
    private EmployeeRepository employeeRepository; 

	 /**
     * 查询
     */
    @RequestMapping("/query/{id}")
    public Employee query(@PathVariable("id") String id) {
 
        Employee accountInfo = employeeRepository.queryEmployeeById(id);
        System.err.println(accountInfo.toString());
 
        return accountInfo;
    }

	/**
     * 聚合查询测试
     */
    @RequestMapping("/querySum")
    public Iterable querySum() {
        /**
         * 创建查询体
         */
        BoolQueryBuilder builder = QueryBuilders.boolQuery();
 
        /**
         * 设置聚合条件
         */
        RangeQueryBuilder query = QueryBuilders.rangeQuery("age").from("30").to("60");
        
        /**
         * 将聚合条件设置入查询体之中
         */
        builder.must(query);
 
        Iterable<Employee> search = employeeRepository.search(builder);
 
        return search;
    }
 
举报

相关推荐

0 条评论