目錄
ignore_above
長度超過ignore_above
設置的字符串將不會被索引或存儲(個人認為會存儲,但不會為該字段建立索引,也就是該字段不能被檢索)。 對於字符串數組,ignore_above
將分別應用於每個數組元素,並且不會索引或存儲比ignore_above
更長的字符串元素。
PUT w1
{
"mappings": {
"doc":{
"properties":{
"t1":{
"type":"keyword",
"ignore_above": 5
},
"t2":{
"type":"keyword",
"ignore_above": 10 ①
}
}
}
}
}
PUT w1/doc/1
{
"t1":"elk", ②
"t2":"elasticsearch" ③
}
GET w1/doc/_search ④
{
"query":{
"term": {
"t1": "elk"
}
}
}
GET w1/doc/_search ⑤
{
"query": {
"term": {
"t2": "elasticsearch"
}
}
}
①,該字段將忽略任何超過10個字符的字符串。
②,此文檔已成功建立索引,也就是說能被查詢,並且有結果返回。
③,該字段將不會建立索引,也就是說,以該字段作為查詢條件,將不會有結果返回。
④,有結果返回。
⑤,則將不會有結果返回,因為t2
字段對應的值長度超過了ignove_above
設置的值。
該參數對於防止Lucene的術語字節長度限制也很有用,限制長度是32766
。
注意,該ignore_above設置可以利用現有的領域進行更新PUT地圖API。
對於值ignore_above
是字符數,但Lucene的字節數為單位。如果您使用帶有許多非ASCII字符的UTF-8文本,您可能需要設置限制,32766 / 4 = 8191
因為UTF-8字符最多可占用4個字節。
如果我們觀察上述示例中,我們可以看到在設置映射類型時,字段的類型是keyword
,也就是說ignore_above
參數僅針對於keyword
類型有用。
那么如果字符串的類型是text
時能用ignore_above
嗎,答案是能,但要特殊設置:
PUT w2
{
"mappings": {
"doc":{
"properties":{
"t1":{
"type":"keyword",
"ignore_above":5
},
"t2":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above": 10
}
}
}
}
}
}
}
PUT w2/doc/1
{
"t1":"beautiful",
"t2":"beautiful girl"
}
GET w2/doc/_search ①
{
"query": {
"term": {
"t1": {
"value": "beautiful"
}
}
}
}
GET w2/doc/_search ②
{
"query": {
"term": {
"t2": "beautiful"
}
}
}
①,不會有返回結果。
②,有返回結果,因為該字段的類型是text
。
但是,當字段類型設置為text
之后,ignore_above
參數的限制就失效了。
歡迎斧正,that's all see also:[官網7.0:ignore_above](https://www.elastic.co/guide/en/elasticsearch/reference/7.0/ignore-above.html) | [ignore_above](https://www.elastic.co/guide/en/elasticsearch/reference/7.0/ignore-above.html)