1. 程式人生 > >Elasticsearch查詢使用

Elasticsearch查詢使用

學習筆記:慕課網:elasticsearch入門,講師:瓦力

一、建立索引

方式1:先建立,後結構化

1.非結構化索引(索引資訊中"mappings": { })

2.給索引新增mappings結構體:

方式2:直接建立並結構化

二、插入資料

方式1:指定文件id插入,put

方式2:自動生成文件id,post

三、修改資料

方式1:指定文件id修改資料,post

方式2:使用指令碼語言修改資料,post

三、刪除文件

四、刪除索引

1.可以通過head外掛直接刪除。

2.通過API刪除。

五、簡單查詢

1.根據文件id查詢

2.查詢所有

3.分頁查詢:

4.關鍵詞查詢:

5.聚合查詢:group by

6.統計查詢:

 

查詢最小值:

 

六、高階查詢

Query context:含匹配度

Filter context:是否匹配(不計算score,會快取->效能好)

除了需要匹配程度的查詢,其餘的查詢都應該使用filter。

全文字查詢:針對文字型別資料

模糊匹配(預設分詞)

{
    "query":{
        "match":{
            "author":"瓦力"
        }
    }
}

短語匹配

{
    "query":{
        "match_phrase":{
            "title":"Elastic搜尋"
        }
    }
}

欄位匹配

{
    "query":{
        "multi_match":{
            "query":"Elastic搜尋",
            "filter": ["author","title"]
        }
    }
}

語法查詢

{
    "query":{
        "query_string": {
            "query":"(Elastic搜尋 AND 入門) OR Python"
        }
    }
}

語法+欄位

{
    "query":{
        "query_string": {
            "query":"Elastic OR Python",
            "fields":["title","author"]
        }
    }
}

欄位級別查詢:針對結構化資料,如數字、日期等

精確查詢(不會分詞)

{
    "query":{
        "term":{
            "word_count":1000
        }
    }
}

範圍查詢

{
    "query":{
        "range":{
            "word_count":{
                "gte":1000, //後面這個e就是equal
                "lte":2000
            }
        }
    }
}

日期查詢

{
    "query":{
        "range":{
            "date":{
                "gte":"2017-1-1", //後面這個e就是equal
                "lte":"now"
            }
        }
    }
}

Filter context

{
    "query": {
        "bool":{
            "filter":{
                "term":{
                    "word_count":1000
                }
            }
        }
    }
}

複合查詢:

固定分數查詢

{
    "query":{
        "constant_score":{    //只支援filter,不支援match
            "filter":{
                "match":{
                    "title":"Elastic搜尋" 
                }
            },
            "boost":2      //指定分數為2
        }
    }
}

shuld查詢:

{
    "query":{
        "should":[// 相當於OR
            {
                "match":{
                    "author":"瓦力"
                }
            },
            {
                "match":{
                    "title":"Elastic搜尋"
                }
            }
        ]
    }
}

must查詢:

{
    "query":{
        "bool":{
            "must":[// 相當於AND
                    {
                    "match":{
                        "author":"瓦力"
                    }
                },
                {
                    "match":{
                        "title":"Elastic搜尋"
                    }
                }
             ],
             "filter":[
                "term":{
                    "word_count":1000
                }   
            ]
        }
    }
}

must_not查詢:

{
    "query":{
        "bool":{
            "must_not":{// 相當於非
                "term":{
                    "author":"瓦力"
                }
            }
        }   
    }
}