Es學習第七課, term、terms、match等基本查詢語法
阿新 • • 發佈:2018-11-14
term、terms查詢
term query會去倒排索引中尋找確切的term,它並不知道分詞器的存在,這種查詢適合keyword、numeric、date等明確值的
term:查詢某個欄位裡含有某個關鍵詞的文件
GET /customer/doc/_search/
{
"query": {
"term": {
"title": "blog"
}
}
}
terms:查詢某個欄位裡含有多個關鍵詞的文件
GET /customer/doc/_search/
{
"query": {
"terms": {
"title": [ "blog","first"]
}
}
}
match查詢
match query 知道分詞器的存在,會對field進行分詞操作,然後再查詢
GET /customer/doc/_search/
{
"query": {
"match": {
"title": "my ss" #它和term區別可以理解為term是精確查詢,這邊match模糊查詢;match會對my ss分詞為兩個單詞,然後term對認為這是一個單詞
}
}
}
match_all:查詢所有文件
GET /customer/doc/_search/
{
"query": {
"match_all": {}
}
}
multi_match:可以指定多個欄位
GET /customer/doc/_search/
{
"query": {
"multi_match": {
"query" : "blog",
"fields": ["name","title"] #只要裡面一個欄位包含值 blog 既可以
}
}
}
match_phrase:短語匹配查詢
ES引擎首先分析查詢字串,從分析後的文字中構建短語查詢,這意味著必須匹配短語中的所有分詞,並且保證各個分詞的相對位置不變
_source:當我們希望返回結果只是一部分欄位時,可以加上_source
GET /customer/doc/_search/
{
"_source":["title"], #只返回title欄位
"query": {
"match_all": {}
}
}
排序
使用sort實現排序(類似sql):desc 降序,asc升序
fuzzy實現模糊查詢
value:查詢的關鍵字
boost:查詢的權值,預設值是1.0
min_similarity:設定匹配的最小相似度,預設值0.5,對於字串,取值0-1(包括0和1);對於數值,取值可能大於1;對於日期取值為1d,1m等,1d等於1天
prefix_length:指明區分詞項的共同字首長度,預設是0
GET /customer/doc/_search/
{
"query": {
"fuzzy": {
"name": {
"value": "blg"
}
}
}
}
#返回:
{
"took": 8,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.19178805,
"hits": [
{
"_index": "customer",
"_type": "doc",
"_id": "1",
"_score": 0.19178805,
"_source": {
"name": "blog",
"tags": [
"testing"
],
"title": "i am a doc"
}
}
]
}
}