版本對照

各版本的文檔說明:https://docs.spring.io/spring-data/elasticsearch/docs/
1、在application.yml中添加配置
spring:
data:
elasticsearch:
repositories:
enabled: true
#多實例集群擴展時需要配置以下兩個參數
#cluster-name: datab-search
#cluster-nodes: 127.0.0.1:9300,127.0.0.1:9301
2、添加 Maven 依賴
<!---開箱即用,版本默認和springboot版本對應-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
3、建立實體entity
注解說明:
Spring Data通過注解來聲明字段的映射屬性,有下面的三個注解:
@Document 作用在類,標記實體類為文檔對象,一般有兩個屬性
indexName:對應索引庫名稱
type:對應在索引庫中的類型
shards:分片數量,默認5
replicas:副本數量,默認1
@Id 作用在成員變量,標記一個字段作為id主鍵
@Field 作用在成員變量,標記為文檔的字段,並指定字段映射屬性:
type:字段類型,是枚舉:FieldType,可以是text、long、short、date、integer、object等
text:存儲數據時候,會自動分詞,並生成索引
keyword:存儲數據時候,不會分詞建立索引
Numerical:數值類型,分兩類
基本數據類型:long、interger、short、byte、double、float、half_float
浮點數的高精度類型:scaled_float
需要指定一個精度因子,比如10或100。elasticsearch會把真實值乘以這個因子后存儲,取出時再還原。
Date:日期類型
elasticsearch可以對日期格式化為字符串存儲,但是建議我們存儲為毫秒值,存儲為long,節省空間。
index:是否索引,布爾類型,默認是true
store:是否存儲,布爾類型,默認是false
analyzer:分詞器名稱,這里的ik_max_word即使用ik分詞器
示例:
@Document(indexName = "cp_doc", type = "doc", shards = 10, replicas = 0)
public class CpDocument extends BaseEntity {
@Id//作用在成員變量,標記一個字段作為id主鍵
private long id ;
@Field(type = FieldType.Text)
private String name ;
@Field(type = FieldType.Text)
private String address ;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
4、編寫 Repository 訪問層
/**
* 基本操作repository-curd
* @author 滾動的蛋
*
*/
public interface CpRepository extends ElasticsearchRepository<CpDocument, Integer> {
}
5、創建索引+查詢示例
@RunWith(SpringRunner.class)
@SpringBootTest
public class ElasticSearchTest {
@Autowired
CpRepository cpRepository;
@Autowired
ElasticsearchTemplate elsTemplate;//ElasticsearchTemplate中提供了創建索引的API
@Test
public void addIndexTest() {
//創建索引
boolean indexRes = elsTemplate.createIndex(CpDocument.class);
System.out.println("======創建索引結果:"+indexRes+"=========");
//添加索引
CpDocument cpTest = new CpDocument();
cpTest.setId(1);
cpTest.setName("阿里巴巴");
cpTest.setAddress("北京路12號");
cpRepository.save(cpTest);
}
@Test
public void srarchTest() {
//這個只做一個多字段的匹配查詢示例,其它的可以查看API文檔使用
//"name","address" 為匹配的字段
MultiMatchQueryBuilder multiMatchQuery = QueryBuilders.multiMatchQuery("阿里巴巴","address","name");//多字段匹配QueryBuilder
SearchQuery searchQuery = new NativeSearchQueryBuilder()//構建查詢對象
.withQuery(multiMatchQuery)
.withIndices("cp_doc")//索引名
.withPageable(PageRequest.of(0, 10))//分頁
.build();
Iterable<CpDocument> productDtos = cpRepository.search(searchQuery);
ArrayList<CpDocument> CpDocuments = Lists.newArrayList(productDtos);
for (CpDocument cpDocument : CpDocuments) {
System.out.printf("企業名稱:%s,企業地址:%s\n",cpDocument.getName(),cpDocument.getAddress());
}
}
