從今天開始我們就來介紹ES中不同種類的搜尋方式
在ES中,search query或是簡稱query,就是對index或是ES data stream發送請求取得相關的資訊
一般我們會比較習慣使用Query DSL來寫語法
Query DSL有以下特點:
接下來我們來介紹幾種常用的查詢方式:
term-level queries:
GET /your_index/_search
{
"query": {
"term": {
"filed_name": {
"value": "value"
}
}
}
}
// boolean
"term": {
"filed_name": {
"value": true
}
// numbers
"term": {
"filed_name": {
"score": 60
}
// date
"term": {
"filed_name": {
"create_time": "2023-05-30 11:27:39"
}
// case_insensitive可以忽略大小寫
"term": {
"block": {
"value": "nba", // 原始資料是NBA
"case_insensitive": true // 可以使其忽略大小寫
}
}
// 透過改成terms來查詢多個單字,只要文檔含有其中一個就返回
"terms": {
"FIELD": [
"VALUE1",
"VALUE2"
]
}
range search:
GET /your_index/_search
{
"query": {
"range": {
"FIELD": {
"gte": 10,
"lte": 20
}
}
}
}
參數名稱 | 數學符號 | 描述 |
---|---|---|
gt | > | 大於 |
gte | ≥ | 大於等於 |
lt | < | 小於 |
lte | ≤ | 小於等於 |
range也能查日期範圍
"range": {
"time_field": {
"time_zone": "+01:00",
"gte": "2023/9/18",
"lte": "2023/9/19"
}
}
Prefixes, wildcards & regular expressions:
GET /ptt/_search
{
"query": {
"wildcard": { // 這邊可以放prefix, wildcard或是regexp分別對應不同的搜尋方式
"block": {
"value": "G"
}
}
}
}
full text query:
Match query:
GET /ptt/_search
{
"query": {
"match": {
"FIELD": "TEXT1 TEXT2",
"operator": "AND"
}
}
}
今天在一些參數上沒有提到太多~之後要使用到的時候再一起介紹
明天我們會繼續把一些基礎的查詢用法給介紹完~
並且也會補上之前沒有介紹完,object搜尋的坑~
參考資料
search your data:
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-your-data.html
Query DSL:
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html
regexp:
https://www.elastic.co/guide/en/elasticsearch/reference/current/regexp-syntax.html