spring data elastic search初识

首先pom文件里依赖:

[html]  view plain  copy
  1. <!-- Elastic search-->  
  2. <dependency>  
  3.     <groupId>org.springframework.data</groupId>  
  4.     <artifactId>spring-data-elasticsearch</artifactId>  
  5.     <version>1.1.3.RELEASE</version>  
  6. </dependency>  
配置elastic

[html]  view plain  copy
  1. <elasticsearch:repositories base-package="com.*.dao" />  
  2.   
  3.  <elasticsearch:transport-client id="client" cluster-nodes="@{elasticsearch.clusterNodes}" cluster-name="@{elasticsearch.clusterName}" />  
  4.   
  5.  <bean name="elasticsearchTemplate" class="org.springframework.data.elasticsearch.core.ElasticsearchTemplate">  
  6.      <constructor-arg name="client" ref="client"/>  
  7.  </bean>  

<elasticsearch: 目前不全,可以改用常用注入bean方式:

[html]  view plain  copy
  1. <bean id="client" class="org.springframework.data.elasticsearch.client.TransportClientFactoryBean" >  
  2.   
  3.     <property name="clusterNodes" value="ip:port,ip:port"/>  
  4.     <property name="clusterName" value="myelasticsearch"/>  
  5.     <property name="properties" >  
  6.       <props>  
  7.           <prop key="sh" >cass</prop>  
  8.           <prop key=""></prop>  
  9.       </props>  
  10.   </property>  
  11.   
  12.  </bean>  


定义的文档结构:

[java]  view plain  copy
  1. @Document(indexName = "product-index",type = "PRODUCT",shards = 1, replicas = 1 ,refreshInterval = "-1")  
  2. public class ProductDocument {  
  3.     private  
  4.     @Id  
  5.     String id;  
  6. private  @Field(type = Nested)List<CityBean> bookCityCode;  
  7.   
  8. }  


Dao 

[java]  view plain  copy
  1. public interface ProductDocumentRepository extends ElasticsearchRepository<ProductDocument,String> {  
  2.   
  3.     public ProductDocument findByProductId(long productId);  
  4. }  

spring data会自动生成repository 的实现类。

也可以写查询的query:

结构bean:

[java]  view plain  copy
  1. @Data  
  2. @Builder  
  3. @Document(indexName = "conference-index", shards = 1, replicas = 0, indexStoreType = "memory", refreshInterval = "-1")  
  4. public class Conference {  
  5.   
  6.     private @Id  
  7.     String id;  
  8.     private String name;  
  9.     private @Field(type = Date) String date;  
  10.     private @GeoPointField  
  11.     String location;  
  12.     private List<String> keywords;  
  13.   
  14.     private  List<CityBean> cityBeans;  
  15.   
  16.     // do not remove it  
  17.     public Conference() {}  
  18.   
  19.     // do not remove it - work around for lombok generated constructor for all params  
  20.     public Conference(String id, String name, String date, String location, List<String> keywords,List<CityBean> cityBeans) {  
  21.   
  22.         this.id = id;  
  23.         this.name = name;  
  24.         this.date = date;  
  25.         this.location = location;  
  26.         this.keywords = keywords;  
  27.         this.cityBeans=cityBeans;  
  28.     }  
  29. }  
  30.   
  31. public class CityBean {  
  32.     private int code;  
  33.     private String name;  
  34. }  

DAO :

[java]  view plain  copy
  1. <pre name="code" class="java">public interface ConferenceRepository extends ElasticsearchRepository<Conference, String> {  
  2.   
  3.     @Query("{\"bool\":{\"must\":[{\"nested\":{\"path\":\"cityBeans\",\"query\":{\"bool\":{\"must\":[{\"match\":{\"cityBeans.code\":?0}}]}}}}]}}" )  
  4.     public List<Conference> findByCityCode(int code,Pageable pageable);  
  5. }  


 

t调用查询:

[java]  view plain  copy
  1. List<Conference> conferences=repository.findByCityCode(1602,new PageRequest(0,20));  

另外一种查询方式:

[java]  view plain  copy
  1. QueryBuilder builder = QueryBuilders.nestedQuery("cityBeans", QueryBuilders.boolQuery().must(termQuery("cityBeans.code"1602)));  
  2.         QueryBuilder builder1=QueryBuilders.boolQuery().must(builder);  
  3.         Iterable<Conference> result4 =repository.search(builder1);  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值