版本:elasticsearch 6.7.0
maven包:
<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-elasticsearch</artifactId> </dependency> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>6.7.0</version> </dependency>
@Document 注解:
public @interface Document {
String indexName(); //索引庫的名稱,個人建議以項目的名稱命名
String type() default ""; //類型,個人建議以實體的名稱命名
short shards() default 5; //默認分區數
short replicas() default 1; //每個分區默認的備份數
String refreshInterval() default "1s"; //刷新間隔
String indexStoreType() default "fs"; //索引文件存儲類型
}
@Field注解:
public @interface Field {
FieldType type() default FieldType.Auto; //自動檢測屬性的類型,可以根據實際情況自己設置
FieldIndex index() default FieldIndex.analyzed; //默認情況下分詞,一般默認分詞就好,除非這個字段你確定查詢時不會用到
DateFormat format() default DateFormat.none; //時間類型的格式化
String pattern() default "";
boolean store() default false; //默認情況下不存儲原文
String searchAnalyzer() default ""; //指定字段搜索時使用的分詞器
String indexAnalyzer() default ""; //指定字段建立索引時指定的分詞器
String[] ignoreFields() default {}; //如果某個字段需要被忽略
boolean includeInParent() default false;
}
FieldType類型:
public enum FieldType {
Text,
Integer,
Long,
Date,
Float,
Double,
Boolean,
Object,
Auto,
Nested,
Ip,
Attachment,
Keyword
}
Text類型:索引全文字段,如電子郵件正文的描述或者產品描述。這些字段被分析器將字符串轉換為單個術語列表。分析過程允許es在每個的全文域中搜索單個單詞。文本字段不用於排序,也很少用於聚合
Object類型:Json文檔本質上是分層的,文檔可能包含內部對象,而這些對象又可能包含內部對象本身。
{
"region": "US",
"manager": {
"age": 30,
"name": {
"first": "John",
"last": "Smith"
}
}
}
Nested類型:嵌套類型是對象數據類型的一個專門的版本,他允許對象數組以一種彼此獨立查詢的方式進行索引
PUT my_index
{
"mappings": {
"_doc": {
"properties": {
"user": {
"type": "nested"
}
}
}
}
}
PUT my_index/_doc/1
{
"group" : "fans",
"user" : [
{
"first" : "John",
"last" : "Smith"
},
{
"first" : "Alice",
"last" : "White"
}
]
}
GET my_index/_search
{
"query": {
"nested": {
"path": "user",
"query": {
"bool": {
"must": [
{ "match": { "user.first": "Alice" }},
{ "match": { "user.last": "Smith" }}
]
}
}
}
}
}
GET my_index/_search
{
"query": {
"nested": {
"path": "user",
"query": {
"bool": {
"must": [
{ "match": { "user.first": "Alice" }},
{ "match": { "user.last": "White" }}
]
}
},
"inner_hits": {
"highlight": {
"fields": {
"user.first": {}
}
}
}
}
}
}
Ip類型:ip字段可以索引和存儲IPV4和IPv6地址
PUT my_index
{
"mappings": {
"_doc": {
"properties": {
"ip_addr": {
"type": "ip"
}
}
}
}
}
PUT my_index/_doc/1
{
"ip_addr": "192.168.1.1"
}
GET my_index/_search
{
"query": {
"term": {
"ip_addr": "192.168.0.0/16"
}
}
}
Keyword類型:用於索引結構化內容(如電子郵件地址,主機名,狀態碼,郵政編碼等)的字段。他們通常用於過濾、排序、聚合。關鍵字字段只能根據期確切的值進行搜索,
分析過程允許Elasticsearch在每個全文域中搜索單個單詞。文本字段不用於排序,也很少用於聚合(
