elasticsearch query dsl
1.match / match_phrase / match_phrase_prefix / multi_match【查詢】
1.1 match 它會根據所給的字符串,進行分詞,然後去找出,包含這些分詞結果的記錄。
GET /_search { "query": { "match": { "title": "我今天看了一場電影" } } }
中文好用的是ik的兩個分詞器 ik_max_word 和 ik_smart
ik_max_word : 會將文本做最細粒度的拆分,例如「中華人民共和國國歌」會被拆分為「中華人民共和國、中華人民、中華、華人、人民共和國、人民、人、民、共和國、共和、和、國國、國歌」,會窮盡各種可能的組合;ik_smart : 會將文本做最粗粒度的拆分,例如「中華人民共和國國歌」會被拆分為「中華人民共和國、國歌」;
提示:做精確匹配搜索時,你最好用過濾語句,因為過濾語句可以緩存數據。
1.2 match_phrase 是短語匹配 比 match 精準一點,因為有時候 match 會分詞出更多的詞。
1.3 match_phrase_prefix 實現查詢時輸入即搜索查詢時輸入即搜索,prefix是前綴的意思,有正則匹配去搜索的意味,只要前綴滿足就會都被查詢到。
參考鏈接:https://blog.csdn.net/chuan442616909/article/details/57917260
1.4 multi_match
GET dm_map_news/_search { "query": { "multi_match": { "query": "中國", "fields": ["title","content"] } } }
2.插入數據
#put插入數據一定要有_id,可以自己指定 PUT lagou/job/1 { "name":"ppp", "age":12 } #post插入數據,可以沒有_id,他會自己隨機生成一個_id POST lagou/job/ { "name":"ppp", "age":13 }
3.bool 【查詢、過濾】
must : 多個查詢條件的完全匹配,相當於 and
must_not : 多個查詢條件的相反匹配,相當於 not
should : 至少有一個查詢條件匹配,相當於 or
{ "bool": { "must": { "match": { "title": "how to make millions" }}, "must_not": { "match": { "tag": "spam" }}, "should": [ { "match": { "tag": "starred" }}, { "range": { "date": { "gte": "2014-01-01" }}} ] } }
適合於復雜的查詢條件
4.term 【過濾】
主要是用於精準匹配.比如數字,日期,布爾值或 not_analyzed
的字符串(未經分析的文本數據類型),但是如果字段是分詞的,也可以查得到。
GET dm_map_news/_search { "_source": "title", "query": { "term": { "title": { "value": "中國" } } } }
5.terms 【過濾】
允許多個匹配條件,如果某個字段指定了多個值,那麽文檔需要一起去做匹配,只要符合其中一個即可
GET dm_map_news/_search { "_source": "title", # 只顯示title資格字段 "query": { "terms": { "title": [ "中國", "新聞" ] } } }
6.range 【過濾】
過濾允許我們按照指定範圍查找一批數據
gt :大於
gte :大於等於
lt : 小於
lte : 小於等於
GET dm_map_news/_search { "_source": "publish_time", "query": { "range": { "publish_time": { "gte": "2018-01-01 00:00:00", "lte": "2019-01-01 00:00:00" } } } }
7. exists 和 missing 【過濾】
用來查看該字段是否存在
GET dm_map_news/_search
{
"query": {
"bool": {
"filter": {
"exists": {
"field": "title"
}
}
}
}
}
但是這裏missing怎麽用不會????????
8._update_by_query / _delete_by_query
8.1 _update_by_query 根據查詢條件查詢出來的數據,修改某些字段的內容
POST crawler_seed_response/info/_update_by_query { "script": { "inline": "ctx._source.state = params.state", "lang": "painless", "params": { "state": "2" } }, "query": { "term": { "entrance_id": "2460994" } } }
解釋:crawler_seed_response中entrance_id=2460994的數據,把state的字段內容修改為2
8.2 _delete_by_query 查詢出來的數據直接刪除,最好是先用 _search 測試下 查詢語句對不對,防止誤操作。
post
10.Task API
10.1 獲取reindex的狀態 GET _tasks?detailed=true&actions=*reindex
11. _reindex
將文檔拷貝到新的索引下
POST _reindex { "source": { "index": "news" }, "dest": { "index": "news_bak" } }
復制一個新的索引 為 news_bak
參考鏈接:
https://blog.csdn.net/liuxiangqian/article/details/78611316?locationNum=9&fps=1
https://es.xiaoleilu.com/index.html
https://www.cnblogs.com/softidea/p/6081285.html
elasticsearch query dsl