Elasticsearch 是一个功能强大的搜索引擎,支持丰富的查询类型,使开发者可以在大规模数据集中快速、精确地检索相关文档。以下是常见的 Elasticsearch 条件查询类型及其使用示例:
1. match
查询
match
查询用于执行全文本搜索,能够匹配特定字段中包含给定词条的文档。它会对搜索词进行分词,并在索引中查找匹配的文档。
示例:查询 address
字段中包含“成都市”的文档。
POST /your_index/_search
{
"query": {
"match": {
"address": "成都市"
}
}
}
2. match_phrase
查询
match_phrase
查询要求匹配的词条必须按顺序连续出现在文档中,适用于需要精确短语匹配的情况。
示例:查询 message
字段中包含短语“文件删除失败”的文档。
GET /your_index/_search
{
"query": {
"match_phrase": {
"message": "文件删除失败"
}
}
}
3. term
查询
term
查询用于精确匹配某个字段的值,不进行分词,适合关键字、枚举值等不需要分词的字段。
示例:查询 status
字段值为“active”的文档。
POST /your_index/_search
{
"query": {
"term": {
"status": "active"
}
}
}
4. range
查询
range
查询用于匹配指定字段中的范围值,适用于数值和日期类型的字段。
示例:查询 price
字段值在 20 到 40 之间的文档(包含边界值)。
GET /your_index/_search
{
"query": {
"range": {
"price": {
"gte": 20,
"lte": 40
}
}
}
}
5. bool
查询
bool
查询是最强大的查询之一,允许通过组合 must
、should
、must_not
和 filter
子句来构建复杂的布尔逻辑查询。
示例:查询 title
字段包含 “Elasticsearch” 且 price
字段值大于或等于 50 的文档。
POST /your_index/_search
{
"query": {
"bool": {
"must": [
{ "match": { "title": "Elasticsearch" }},
{ "range": { "price": { "gte": 50 }}}
]
}
}
}
6. multi_match
查询
multi_match
查询允许在多个字段中搜索相同的查询字符串,并可以指定不同字段之间的权重。
示例:在 name
和 description
字段中搜索包含“apple”的文档。
POST /your_index/_search
{
"query": {
"multi_match": {
"query": "apple",
"fields": ["name", "description"]
}
}
}
7. query_string
查询
query_string
查询支持使用 Lucene 查询语法进行高级搜索,能够构建复杂的搜索查询。
示例:在 character
字段中搜索包含“乐观”或“赞扬”的文档。
GET /your_index/_search
{
"query": {
"query_string": {
"default_field": "character",
"query": "乐观 OR 赞扬"
}
}
}
总结
Elasticsearch 提供了多种查询类型,支持从简单的关键词匹配到复杂的逻辑组合查询。这些查询类型能够帮助开发者根据实际需求构建高效、精准的搜索功能,以更好地挖掘和利用数据。
通过灵活运用这些查询类型,用户可以在多样化的场景中实现精准的信息检索,充分发挥 Elasticsearch 的搜索能力。