溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何正確的使用ElastchSearch

發(fā)布時間:2021-08-05 16:09:53 來源:億速云 閱讀:140 作者:Leah 欄目:編程語言

這期內(nèi)容當中小編將會給大家?guī)碛嘘P(guān)如何正確的使用ElastchSearch,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

1. 添加文檔

首次添加文檔時,若索引不存在會自動創(chuàng)建; 借助 kibana 的dev-tools來實現(xiàn) es 的交互

POST first-index/_doc
{
  "@timestamp": "2021-03-31T01:12:00",
  "message": "GET /search HTTP/1.1 200 1070000",
  "user": {
    "id": "YiHui",
    "name": "一灰灰Blog"
  },
  "addr": {
    "country": "cn",
    "province": "hubei",
    "city": "wuhan"
  },
  "age": 18
}

## 添加兩個數(shù)據(jù)進行測試
POST first-index/_doc
{
  "@timestamp": "2021-03-31T02:12:00",
  "message": "GET /search HTTP/1.1 200 1070000",
  "user": {
    "id": "ErHui",
    "name": "二灰灰Blog"
  },
  "addr": {
    "country": "cn",
    "province": "hubei",
    "city": "wuhan"
  },
  "age": 19
}

當然也可以直接使用 http 進行交互,下面的方式和上面等價(后面都使用 kibanan 進行交互,更直觀一點)

curl  -X POST 'http://localhost:9200/first-index/_doc?pretty' -H 'Content-Type: application/json' -d '
{
  "@timestamp": "2021-03-31T01:12:00",
  "message": "GET /search HTTP/1.1 200 1070000",
  "user": {
    "id": "YiHui",
    "name": "一灰灰Blog"
  },
  "addr": {
    "country": "cn",
    "province": "hubei",
    "city": "wuhan"
  },
  "age": 18
}'

如何正確的使用ElastchSearch

2. 查詢文檔

2.0 kibana 配置并查詢

除了基礎(chǔ)的查詢語法之外,直接使用 kibana 進行查詢,對于使用方而言,門檻最低;首先配置上面的 es 索引

  • Management -> Stack Management -> Kiabana Index Patterns

  • index pattern name

  • 時間字段,選擇 @timestamp 這個與實際的文檔中的 field 有關(guān)

如何正確的使用ElastchSearch

如何正確的使用ElastchSearch

如何正確的使用ElastchSearch

如何正確的使用ElastchSearch

接下來進入Discover 進行查詢

如何正確的使用ElastchSearch

比如字段查詢

如何正確的使用ElastchSearch

2.1 查詢所有

不加任何匹配,撈出文檔(當數(shù)據(jù)量很多時,當然也不會真的全部返回,也是會做分頁的)

GET my-index/_search
{
  "query": {
    "match_all": {
    }
  }
}

如何正確的使用ElastchSearch

2.2 term 精確匹配

根據(jù) field 進行 value 匹配,忽略大小寫;

查詢語法,形如: `{"query": {"term": {"成員名": {"value": "查詢值"}}}}

  • query, term, value 三個 key 為固定值

  • 成員名: 為待查詢的成員

  • 查詢值: 需要匹配的值

(說明:后面語法中,中文的都是需要替換的,英文的為固定值)

GET first-index/_search
{
  "query": {
    "term": {
      "user.id": {
        "value": "yihui"
      }
    }
  }
}

如何正確的使用ElastchSearch

當 value 不匹配,或者查詢的 field 不存在,則查不到的對應(yīng)的信息,如

如何正確的使用ElastchSearch

2.3 terms 多值匹配

term 表示 value 的精確匹配,如果我希望類似value in (xxx)的查詢,則可以使用 terms

語法:

{
	"query": {
		"terms": {
			"成員名": [成員值, 成員值]
		}
	}
}

實例如

GET first-index/_search
{
  "query": {
    "terms": {
      "user.id": ["yihui", "erhui"]
    }
  }
}

如何正確的使用ElastchSearch

2.4 range 范圍匹配

適用于數(shù)值、日期的比較查詢,如常見的 >, >=, <, <=

查詢語法

{
	"query": {
        "range": {
            "成員名": {
                "gte": "查詢下界" ,
                "lte": "查詢下界"
            }
        }
	}
}
范圍操作符說明
gt大于 >
gte大于等于 >=
lt小于 <
lte小于等于 <=

實例如下

GET first-index/_search
{
  "query": {
    "range": {
      "age": {
        "gte": 10,
        "lte": 18
      }
    }
  }
}

如何正確的使用ElastchSearch

2.5 字段過濾

根據(jù)是否包含某個字段來查詢, 主要有兩個 exists 表示要求存在, missing表示要求不存在

查詢語法

{
    "query": {
        "exists/missing": {
            "field": "字段值"
        }
    }
}

實例如下

GET first-index/_search
{
  "query": {
    "exists": {
      "field": "age"
    }
  }
}

如何正確的使用ElastchSearch

2.6 組合查詢

上面都是單個查詢條件,單我們需要多個查詢條件組合使用時,可以使用bool + must/must_not/should來實現(xiàn)

查詢語法

{
    "query": {
        "bool": {
            "must": [ # 相當于and查詢
                "查詢條件1",
                "查詢條件2"
            ],
            "must_not": [ # 多個查詢條件相反匹配,相當與not
                ...
            ],
            "should": [ # 有一個匹配即可, 相當于or
                ...
            ]
        }
    }
}

實例如下

## user.id = yihui and age < 20
GET first-index/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "user.id": {
              "value": "yihui"
            }
          }
        },
        {
          "range": {
            "age": {
              "lt": 20
            }
          }
        }
      ]
    }
  }
}

# !(user.id) = yihui and !(age>20)
GET first-index/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "term": {
            "user.id": {
              "value": "yihui"
            }
          }
        },
        {
          "range": {
            "age": {
              "gt": 20
            }
          }
        }
      ]
    }
  }
}

# user.id = 'yihui' or age>20
GET first-index/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "user.id": {
              "value": "yihui"
            }
          }
        },
        {
          "range": {
            "age": {
              "gt": 20
            }
          }
        }
      ]
    }
  }
}

下面截圖以 must_not 輸出示意

如何正確的使用ElastchSearch

說明

  • 前面根據(jù)字段查詢 existing 只能單個匹配,可以借助這里的組合來實現(xiàn)多個的判斷

2.7 match 查詢

最大的特點是它更適用于模糊查詢,比如查詢某個 field 中的字段匹配

語法

{
    "query": {
        "match": {
            "字段名": "查詢值"
        }
    }
}

舉例說明

GET first-index/_search
{
  "query": {
    "match": {
      "user.name": "灰og"
    }
  }
}

如何正確的使用ElastchSearch

說明,如果有精確查詢的需求,使用前面的 term,可以緩存結(jié)果

2.8 multi_match 查詢

更多相關(guān)信息,可以查看: 官網(wǎng)-multi_match 查詢

多個字段中進行查詢

語法

  • type: best_fields 、 most_fieldscross_fields (最佳字段、多數(shù)字段、跨字段)

  • 最佳字段 :當搜索詞語具體概念的時候,比如 “brown fox” ,詞組比各自獨立的單詞更有意義

  • 多數(shù)字段:為了對相關(guān)度進行微調(diào),常用的一個技術(shù)就是將相同的數(shù)據(jù)索引到不同的字段,它們各自具有獨立的分析鏈。

  • 混合字段:對于某些實體,我們需要在多個字段中確定其信息,單個字段都只能作為整體的一部分

{
    "query": {
        "multi_match": {
            "query":                "Quick brown fox",
            "type":                 "best_fields",
            "fields":               [ "title", "body" ],
            "tie_breaker":          0.3,
            "minimum_should_match": "30%"
        }
    }
}

實例演示

GET first-index/_search
{
  "query": {
    "multi_match": {
      "query": "漢",
      "fields": ["user.id", "addr.city"]
    }
  }
}

如何正確的使用ElastchSearch

上面除了寫上精確的字段之外,還支持模糊匹配,比如所有字段中進行匹配

GET first-index/_search
{
  "query": {
    "multi_match": {
      "query": "blog",
      "fields": ["*"]
    }
  }
}
2.9 wildcard 查詢

shell 統(tǒng)配符

  • ?: 0/1 個字符

  • *: 0/n 個字符

GET first-index/_search
{
  "query": {
    "wildcard": {
      "user.id": {
        "value": "*Hu?"
      }
    }
  }
}

說明,對中文可能有問題

2.10 regexp 查詢

正則匹配

GET first-index/_search
{
  "query": {
    "regexp": {
      "user.name": ".*log"
    }
  }
}
2.11 prefix 查詢

前綴匹配

GET first-index/_search
{
  "query": {
    "prefix": {
      "user.name": "一"
    }
  }
}
2.12 排序

查詢結(jié)果排序,根據(jù) sort 來指定

{
	"sort": [
        {
          "成員變量": {
            "order": "desc"
          }
        }
  	]
}

實例如下

GET first-index/_search
{
  "query":{
    "match_all": {}
  },
  "sort": [
    {
      "@timestamp": {
        "order": "desc"
      }
    }
  ]
}
2.13 更多

更多操作姿勢,可以在官方文檔上獲取

官方教程

3. 刪除文檔

需要根據(jù)文檔 id 進行指定刪除

DELETE first-index/_doc/gPYLh4gBF9fSFsHNEe58

如何正確的使用ElastchSearch

刪除成功

如何正確的使用ElastchSearch

4.更新文檔

4.1 覆蓋更新

使用 PUT 來實現(xiàn)更新,同樣通過 id 進行

  • 覆蓋更新

  • version 版本會+1

  • 如果 id 對應(yīng)的文檔不存在,則新增

PUT first-index/_doc/f_ZFhngBF9fSFsHNte7f
{
  "age": 28
}

如何正確的使用ElastchSearch

4.2 增量更新

采用 POST 來實現(xiàn)增量更新

  • field 存在,則更新

  • field 不存在,則新增

POST first-index/_update/gvarh4gBF9fSFsHNuO49
{
  "doc": {
    "age": 25
  }
}

如何正確的使用ElastchSearch

此外還可以采用 script 腳本更新

  • 在原來的 age 基礎(chǔ)上 + 5

POST first-index/_update/gvarh4gBF9fSFsHNuO49
{
  "script": "ctx._source.age += 5"
}

上述就是小編為大家分享的如何正確的使用ElastchSearch了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI