Elasticsearch 查詢分類大緻分為全文查詢、詞項查詢、複合查詢、嵌套查詢、地理位置查詢、特殊查詢。
全文查詢
比對查詢match
match和term的差別是,match查詢的時候,elasticsearch會根據你給定的字段提供合适的分析器,而term查詢不會有分析器分析的過程,match查詢相當于模糊比對,隻包含其中一部分關鍵詞就行同時還要注意match系列比對時,datatype要設定為text,否則不會開啟分詞。
match_all 查詢
查詢比對所有的文檔
# 查詢比對所有的文檔
GET /index_name/_search
{
"query":{
"match_all":{
}
}
}
# 輸出結果
{
"took":0,
"timed_out":false,
"_shards":{
"total":2,
"successful":2,
"skipped":0,
"failed":0
},
"hits":{
"total":{
"value":5,
"relation":"eq"
},
"max_score":1,
"hits":[
{
"_index":"index_name",
"_type":"_doc",
"_id":"1",
"_score":1,
"_source":{
"id":1001,
"name":"張三",
"age":12,
"desc":"我的自我描述",
"birthday":"2020-02-02"
}
},
...
{
"_index":"index_name",
"_type":"_doc",
"_id":"Rmc5rYYBhncLYm9c_fxA",
"_score":1,
"_source":{
"id":1005,
"name":"王五",
"age":14,
"desc":"超人的平凡人生",
"birthday":"2023-02-04"
}
}
]
}
}
match 查詢
支援全文檢索和精确查詢,取決于字段是否支援全文檢索,字段類型為text支援全文檢索。當一個字段需要用于全文搜尋(會被分詞), 比如産品名稱、産品描述資訊,就應該使用text類型。
當一個字段需要按照精确值進行過濾、排序、聚合等操作時,就應該使用keyword類型。
全文檢索
# 全文檢索,desc字段類型是text,支援全文檢索,全文檢索會将查詢的字元串先進行分詞,會将desc字段值包
含[我,的,我的]的文檔都查詢出來
GET /index_name/_search
{
"query":{
"match":{
"desc":"我的"
}
}
}
# 輸出結果
{
"took":1,
"timed_out":false,
"_shards":{
"total":2,
"successful":2,
"skipped":0,
"failed":0
},
"hits":{
"total":{
"value":4,
"relation":"eq"
},
"max_score":0.8084657,
"hits":[
{
"_index":"index_name",
"_type":"_doc",
"_id":"1",
"_score":0.8084657,
"_source":{
"id":1001,
"name":"張三",
"age":12,
"desc":"我的自我描述",
"birthday":"2020-02-02"
}
},
{
"_index":"index_name",
"_type":"_doc",
"_id":"G2cyrYYBhncLYm9cmrSc",
"_score":0.8084657,
"_source":{
"id":1003,
"name":"王五",
"age":14,
"desc":"我的自我述3",
"birthday":"2023-02-03"
}
},
{
"_index":"index_name",
"_type":"_doc",
"_id":"KWcyrYYBhncLYm9cWbGB",
"_score":0.7622653,
"_source":{
"id":1002,
"name":"李四",
"age":13,
"desc":"我的自我描2述",
"birthday":"2023-02-03"
}
},
{
"_index":"index_name",
"_type":"_doc",
"_id":"Rmc5rYYBhncLYm9c_fxA",
"_score":0.2876821,
"_source":{
"id":1005,
"name":"王五",
"age":14,
"desc":"超人的平凡人生",
"birthday":"2023-02-04"
}
}
]
}
}