查询关键词的含义:
-
match: 用于进行全文搜索,分析查询文本并与倒排索引中的词项进行匹配。
-
term: 精确匹配,适用于非分析字段,如 keyword 类型。用于查找字段值完全相等的文档。
-
bool : 组合多个查询条件。可以使用
must
(必须满足)、should
(可选满足)和must_not
(不能满足)来构建复杂查询。 -
range: 用于查找字段值在某个范围内的文档。例如,可以查找年龄大于某个值的用户。
-
wildcard : 使用通配符(如
*
和?
)进行模糊匹配。适用于匹配包含特定模式的字段值。 -
fuzzy: 模糊匹配,允许一定的拼写错误或相似度。通常用于文本字段。
-
aggregations: 用于统计和分析数据,比如计数、求和、平均等。适用于对结果集进行聚合。
-
size: 定义返回结果的文档数量。
-
from: 用于分页,定义从结果集的哪个位置开始返回文档。
-
sort: 用于对结果进行排序,可以根据一个或多个字段进行升序或降序排序。
-
should
是用于bool
查询的一个子句,它允许你指定可选的匹配条件。使用should
的查询具有以下特点:
should
特点
可选匹配 :在
should
中列出的条件不是必需的,只要至少满足一个条件,文档就会被包含在结果中。加权 :如果一个文档匹配多个
should
条件,它的评分会更高。这可以帮助你根据相关性对结果进行排序。组合查询 :可以与
must
和must_not
一起使用,以创建复杂的查询逻辑。
- 简单查询
查找所有文档:
json
GET /users/_search
{
"query": {
"match_all": {}
}
}
- 匹配查询
查找名称为 "Alice" 的用户:
json
GET /users/_search
{
"query": {
"match": {
"name": "Alice"
}
}
}
- 布尔查询
查找年龄大于 25 且兴趣包含 "reading" 的用户:
json
GET /users/_search
{
"query": {
"bool": {
"must": [
{ "range": { "age": { "gt": 25 } } },
{ "match": { "interests": "reading" } }
]
}
}
}
- 过滤查询
查找居住在纽约的用户:
json
GET /users/_search
{
"query": {
"term": {
"address.city": "New York"
}
}
}
- 聚合查询
统计不同兴趣的用户数量:
json
GET /users/_search
{
"size": 0,
"aggs": {
"interests_count": {
"terms": {
"field": "interests"
}
}
}
}
- 组合查询
查找年龄在 20 到 40 之间,且居住在纽约的用户:
json
GET /users/_search
{
"query": {
"bool": {
"must": [
{ "range": { "age": { "gte": 20, "lte": 40 } } },
{ "term": { "address.city": "New York" } }
]
}
}
}