Spring Data Elasticsearch基本使用


Spring Data Elasticsearch基本使用

 

官網指南: https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#reference

1、maven依賴:

  <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
  </dependency>

2.、配置application.yml文件

# yml配置elasticsearch客戶端地址(可配置項有限) spring: elasticsearch: rest: uris: http://192.168.220.101:9200 # elasticsearch 連接地址
 username: elastic # 用戶名 password: 123456 # 密碼 connection-timeout: 10s # 連接超時時間(默認1s) read-timeout: 30s # 數據讀取超時時間(默認30s) # 方便查詢發送的http請求詳細內容 logging: file: name: ./log/log.log level: root: info org.springframework.data.elasticsearch.client.WIRE: trace

 

3. 實體類及注解

/** * @Author dw * @ClassName User * @Description 實體映射 * * 注解說明 * @Document:在類級別應用,以指示該類是映射到數據庫的候選對象。最重要的屬性是: * indexName:用於存儲此實體的索引的名稱。它可以包含SpEL模板表達式,例如 "log-#{T(java.time.LocalDate).now().toString()}" * type:映射類型。如果未設置,則使用小寫的類的簡單名稱。(從版本4.0開始不推薦使用) * shards:索引的分片數。 * replicas:索引的副本數。 * refreshIntervall:索引的刷新間隔。用於索引創建。默認值為“ 1s”。 * indexStoreType:索引的索引存儲類型。用於索引創建。默認值為“ fs”。 * createIndex:標記是否在存儲庫引導中創建索引。默認值為true。請參見使用相應的映射自動創建索引 * versionType:版本管理的配置。默認值為EXTERNAL。 * @Id:在字段級別應用,以標記用於標識目的的字段。 * @Transient:默認情況下,存儲或檢索文檔時,所有字段都映射到文檔,此注釋不包括該字段。 * @PersistenceConstructor:標記從數據庫實例化對象時要使用的給定構造函數,甚至是受保護的程序包。構造函數參數按名稱映射到檢索到的Document中的鍵值。 * @Field:在字段級別應用並定義字段的屬性,大多數屬性映射到各自的Elasticsearch映射定義(以下列表不完整,請查看注釋Javadoc以獲得完整參考): * name:字段名稱,它將在Elasticsearch文檔中表示,如果未設置,則使用Java字段名稱。 * type:字段類型,可以是Text, Keyword, Long, Integer, Short, Byte, Double, Float, Half_Float, 
Scaled_Float, Date, Date_Nanos, Boolean, Binary, Integer_Range, Float_Range, Long_Range, Double_Range,
Date_Range, Ip_Range, Object, Nested, Ip, TokenCount, Percolator, Flattened, Search_As_You_Type。請參閱Elasticsearch映射類型 * format和日期類型的pattern定義。必須為日期類型定義format * store:標記是否將原始字段值存儲在Elasticsearch中,默認值為false。 * analyzer,searchAnalyzer,normalizer用於指定自定義分析和正規化。 * @GeoPoint:將字段標記為geo_point數據類型。如果字段是GeoPoint類的實例,則可以省略。 * * @Date 2021/5/11 21:55 * @Version 1.0
*/ @Document(indexName = "user", shards = 3, replicas = 0) @Data @AllArgsConstructor @NoArgsConstructor public class User { @Id private Integer id; @Field(type = FieldType.Keyword) private String name; @Field(type = FieldType.Integer) private Integer age; @Field(type = FieldType.Text, analyzer = "ik_max_word") private String address; @Field(type = FieldType.Date, format = DateFormat.custom, pattern = "uuuu-MM-dd'T'HH:mm:ss.SSSX") private LocalDateTime createTime; }

 

4、增刪改查操作

Spring Data 的強大之處,就在於你不用寫任何DAO處理,自動根據方法名或類的信息進行CRUD操作。只要你定義一個接口,然后繼承Repository提供的一些子接口,就能具備各種基本的CRUD功能。

編寫 UserRepository

@Repository public interface UserRepository extends ElasticsearchRepository<User, Integer> { List<User> findUsersByNameAndAddress(String name, String address); }

自定義方法

Spring Data 的另一個強大功能,是根據方法名稱自動實現功能。
比如:你的方法名叫做:findByTitle,那么它就知道你是根據title查詢,然后自動幫你完成,無需寫實現類。
當然,方法名稱要符合一定的約定:

Keyword Sample Elasticsearch Query String
And findByNameAndPrice {"bool" : {"must" : [ {"field" : {"name" : "?"}}, {"field" : {"price" : "?"}} ]}}
Or findByNameOrPrice {"bool" : {"should" : [ {"field" : {"name" : "?"}}, {"field" : {"price" : "?"}} ]}}
Is findByName {"bool" : {"must" : {"field" : {"name" : "?"}}}}
Not findByNameNot {"bool" : {"must_not" : {"field" : {"name" : "?"}}}}
Between findByPriceBetween {"bool" : {"must" : {"range" : {"price" : {"from" : ?,"to" : ?,"include_lower" : true,"include_upper" : true}}}}}
LessThanEqual findByPriceLessThan {"bool" : {"must" : {"range" : {"price" : {"from" : null,"to" : ?,"include_lower" : true,"include_upper" : true}}}}}
GreaterThanEqual findByPriceGreaterThan {"bool" : {"must" : {"range" : {"price" : {"from" : ?,"to" : null,"include_lower" : true,"include_upper" : true}}}}}
Before findByPriceBefore {"bool" : {"must" : {"range" : {"price" : {"from" : null,"to" : ?,"include_lower" : true,"include_upper" : true}}}}}
After findByPriceAfter {"bool" : {"must" : {"range" : {"price" : {"from" : ?,"to" : null,"include_lower" : true,"include_upper" : true}}}}}
Like findByNameLike {"bool" : {"must" : {"field" : {"name" : {"query" : "?*","analyze_wildcard" : true}}}}}
StartingWith findByNameStartingWith {"bool" : {"must" : {"field" : {"name" : {"query" : "?*","analyze_wildcard" : true}}}}}
EndingWith findByNameEndingWith {"bool" : {"must" : {"field" : {"name" : {"query" : "*?","analyze_wildcard" : true}}}}}
Contains/Containing findByNameContaining {"bool" : {"must" : {"field" : {"name" : {"query" : "**?**","analyze_wildcard" : true}}}}}
In findByNameIn(Collection<String>names) {"bool" : {"must" : {"bool" : {"should" : [ {"field" : {"name" : "?"}}, {"field" : {"name" : "?"}} ]}}}}
NotIn findByNameNotIn(Collection<String>names) {"bool" : {"must_not" : {"bool" : {"should" : {"field" : {"name" : "?"}}}}}}
Near findByStoreNear Not Supported Yet !
True findByAvailableTrue {"bool" : {"must" : {"field" : {"available" : true}}}}
False findByAvailableFalse {"bool" : {"must" : {"field" : {"available" : false}}}}
OrderBy findByAvailableTrueOrderByNameDesc {"sort" : [{ "name" : {"order" : "desc"} }],"bool" : {"must" : {"field" : {"available" : true}}}}

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM