spring-data-elasticsearch (elasticsearch 6.7.0) @Document 和 @Field 注解詳解


版本: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在每個全文域中搜索單個單詞。文本字段不用於排序,也很少用於聚合(


免責聲明!

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



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