编程 Elasticsearch 条件查询

2024-11-19 06:50:24 +0800 CST views 1170

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 查询是最强大的查询之一,允许通过组合 mustshouldmust_notfilter 子句来构建复杂的布尔逻辑查询。

示例:查询 title 字段包含 “Elasticsearch” 且 price 字段值大于或等于 50 的文档。

POST /your_index/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "title": "Elasticsearch" }},
        { "range": { "price": { "gte": 50 }}}
      ]
    }
  }
}

6. multi_match 查询

multi_match 查询允许在多个字段中搜索相同的查询字符串,并可以指定不同字段之间的权重。

示例:在 namedescription 字段中搜索包含“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 的搜索能力。

复制全文 生成海报 搜索引擎 数据检索 技术文档

推荐文章

一键压缩图片代码
2024-11-19 00:41:25 +0800 CST
Go 单元测试
2024-11-18 19:21:56 +0800 CST
PHP中获取某个月份的天数
2024-11-18 11:28:47 +0800 CST
Golang 中你应该知道的 noCopy 策略
2024-11-19 05:40:53 +0800 CST
MySQL 主从同步一致性详解
2024-11-19 02:49:19 +0800 CST
18个实用的 JavaScript 函数
2024-11-17 18:10:35 +0800 CST
使用临时邮箱的重要性
2025-07-16 17:13:32 +0800 CST
Go语言中的`Ring`循环链表结构
2024-11-19 00:00:46 +0800 CST
Python 获取网络时间和本地时间
2024-11-18 21:53:35 +0800 CST
Elasticsearch 文档操作
2024-11-18 12:36:01 +0800 CST
Go语言SQL操作实战
2024-11-18 19:30:51 +0800 CST
10个几乎无人使用的罕见HTML标签
2024-11-18 21:44:46 +0800 CST
nginx反向代理
2024-11-18 20:44:14 +0800 CST
Vue3中如何使用计算属性?
2024-11-18 10:18:12 +0800 CST
JavaScript设计模式:适配器模式
2024-11-18 17:51:43 +0800 CST
全栈工程师的技术栈
2024-11-19 10:13:20 +0800 CST
一个简单的html卡片元素代码
2024-11-18 18:14:27 +0800 CST
用 Rust 玩转 Google Sheets API
2024-11-19 02:36:20 +0800 CST
JavaScript 策略模式
2024-11-19 07:34:29 +0800 CST
25个实用的JavaScript单行代码片段
2024-11-18 04:59:49 +0800 CST
CSS 媒体查询
2024-11-18 13:42:46 +0800 CST
程序员茄子在线接单