1.?簡單查詢(URI Search)
通過 URL 參數直接進行查詢,適合簡單的搜索場景。
示例:
bash
復制
GET /index_name/_search?q=field_name:search_value
說明:
-
index_name
:索引名稱。 -
field_name
:字段名稱。 -
search_value
:搜索值。
特點:
-
簡單易用,適合快速測試。
-
功能有限,不支持復雜的查詢邏輯。
2.?DSL 查詢(Query DSL)
使用 Elasticsearch 的?Query DSL(Domain Specific Language)進行查詢,支持復雜的查詢邏輯。
示例:
json
復制
GET /index_name/_search {"query": {"match": {"field_name": "search_value"}} }
常用查詢類型:
-
Match Query:全文搜索,支持分詞。
json
復制
{"query": {"match": {"field_name": "search_value"}} }
-
Term Query:精確匹配,不支持分詞。
json
復制
{"query": {"term": {"field_name": {"value": "search_value"}}} }
-
Range Query:范圍查詢。
json
復制
{"query": {"range": {"field_name": {"gte": 10,"lte": 20}}} }
-
Bool Query:組合查詢(支持?
must
、should
、must_not
)。json
復制
{"query": {"bool": {"must": [{ "match": { "field1": "value1" } },{ "match": { "field2": "value2" } }]}} }
特點:
-
功能強大,支持復雜的查詢邏輯。
-
適合生產環境使用。
3.?聚合查詢(Aggregations)
用于對數據進行統計和分析,支持多種聚合操作(如求和、平均值、分組等)。
示例:
json
復制
GET /index_name/_search {"size": 0,"aggs": {"group_by_field": {"terms": {"field": "field_name"}}} }
常用聚合類型:
-
Terms Aggregation:按字段值分組。
-
Metric Aggregation:計算指標(如?
sum
、avg
、max
、min
)。 -
Date Histogram Aggregation:按時間區間分組。
-
Nested Aggregation:嵌套聚合。
特點:
-
適合數據分析場景。
-
可以結合 Query DSL 使用。
4.?過濾查詢(Filter Context)
用于過濾數據,通常與 Query DSL 結合使用。
示例:
json
復制
GET /index_name/_search {"query": {"bool": {"filter": [{ "term": { "field_name": "value" } }]}} }
特點:
-
過濾條件不參與評分,性能較高。
-
適合精確匹配場景。
5.?高亮查詢(Highlighting)
用于高亮顯示搜索結果中的匹配部分。
示例:
json
復制
GET /index_name/_search {"query": {"match": {"field_name": "search_value"}},"highlight": {"fields": {"field_name": {}}} }
特點:
-
適合需要突出顯示搜索結果的場景。
6.?分頁查詢(Pagination)
用于分頁獲取數據。
示例:
json
復制
GET /index_name/_search {"from": 0,"size": 10,"query": {"match_all": {}} }
說明:
-
from
:起始位置。 -
size
:每頁大小。
特點:
-
適合大數據量的分頁查詢。
7.?排序查詢(Sorting)
用于對搜索結果進行排序。
示例:
json
復制
GET /index_name/_search {"query": {"match_all": {}},"sort": [{ "field_name": { "order": "asc" } }] }
特點:
-
支持多字段排序。
-
可以結合分頁查詢使用。
8.?腳本查詢(Script Query)
使用腳本進行自定義查詢。
示例:
json
復制
GET /index_name/_search {"query": {"script": {"script": {"source": "doc['field_name'].value > params.value","params": {"value": 10}}}} }
特點:
-
支持復雜的自定義邏輯。
-
性能較低,慎用。
9.?嵌套查詢(Nested Query)
用于查詢嵌套類型的字段。
示例:
json
復制
GET /index_name/_search {"query": {"nested": {"path": "nested_field","query": {"match": {"nested_field.sub_field": "value"}}}} }
特點:
-
適合處理嵌套結構的文檔。
10.?跨索引查詢(Cross-Index Search)
可以同時查詢多個索引的數據。
示例:
json
復制
GET /index1,index2/_search {"query": {"match_all": {}} }
特點:
-
適合需要從多個索引中查詢數據的場景。
總結
Elasticsearch 提供了豐富的查詢方式,可以根據不同的需求選擇合適的查詢方法:
-
簡單查詢:適合快速測試。
-
DSL 查詢:功能強大,適合生產環境。
-
聚合查詢:適合數據分析。
-
過濾查詢:適合精確匹配。
-
高亮查詢:適合突出顯示搜索結果。
-
分頁查詢:適合大數據量場景。
-
腳本查詢:支持自定義邏輯。
根據具體場景選擇合適的查詢方式,可以提高查詢效率和準確性。