Elasticsearch

核心数据类型

类型 说明 使用场景
text 全文搜索字段,会被分词 文章内容、描述、评论
keyword 精确值字段,不分词 状态码、标签、ID、枚举值
long 64位整数 数量、ID、时间戳

DSL

JSON 格式,支持复杂的查询、过滤、聚合。

全文查询

主要用于搜索文本字段,如 text 类型,查询字符串也会被分词,然后进行匹配。

match

会对查询文本进行与字段相同的分词处理

// 完整语法结构
{
  "query": {
    "match": {
      "field_name": {
        "query": "your search text",    // 基础匹配
        "operator": "or",               // 可选:or/and,逻辑关系
        "minimum_should_match": "75%",  // 可选,最小匹配数量
        "fuzziness": "AUTO",            // 可选,模糊匹配
        "analyzer": "standard"          // 可选,指定分词器
      }
    }
  }
}

基础匹配

// 搜索 "product_description" 字段包含 "quick brown fox"
GET /products/_search
{
  "query": {
    "match": {
      "product_description": "quick brown fox" 
    }
  }
}
// 搜索词 "quick brown fox" 被分词为 ["quick", "brown", "fox"],查找包含任意一个这些词的文档,同时包含多个词的文档获得更高评分

operator参数:控制逻辑关系

// 使用 AND 操作符(必须包含所有词)
GET /articles/_search
{
  "query": {
    "match": {
      "content": {
        "query": "elasticsearch tutorial",
        "operator": "and"
      }
    }
  }
}
// "operator": "or"(默认):匹配 "elasticsearch" 或 "tutorial"、"operator": "and":必须同时匹配 "elasticsearch" 和 "tutorial"

minimum_should_match:最小匹配数量

// 至少匹配 2 个词(3 个词中的 2 个)
GET /books/_search
{
  "query": {
    "match": {
      "title": {
        "query": "advanced java programming",
        "minimum_should_match": 2
      }
    }
  }
}

// 百分比形式(至少匹配 75% 的词)
GET /news/_search
{
  "query": {
    "match": {
      "headline": {
        "query": "artificial intelligence machine learning deep learning",
        "minimum_should_match": "75%"
      }
    }
  }
}

fuzziness:模糊匹配

// 允许拼写错误(编辑距离为 1-2)
GET /users/_search
{
  "query": {
    "match": {
      "username": {
        "query": "john",
        "fuzziness": "AUTO"  // 自动判断允许的编辑距离
      }
    }
  }
}
// fuzziness 值,0、1、2:允许的最大编辑距离、"AUTO":根据词长自动决定(推荐)

analyzer:指定分词器

// 使用中文分词器
GET /articles_cn/_search
{
  "query": {
    "match": {
      "content": {
        "query": "人工智能技术",
        "analyzer": "ik_smart"  // 使用 IK 中文分词器
      }
    }
  }
}

match_phase

用于精确短语匹配的查询类型,它要求搜索词在文档中按顺序完整出现,且词间距可配置。

// 完整语法结构
{
  "query": {
    "match_phrase": {
      "field_name": {
        "query": "exact phrase to search",
        "slop": 0,                 // 可选:允许的间隔距离
        "analyzer": "standard"     // 可选:指定分词器
      }
    }
  }
}

基础匹配

// 搜索包含完整短语 "quick brown fox" 的文档
GET /fables/_search
{
  "query": {
    "match_phrase": {
      "content": "quick brown fox"
    }
  }
}
// 匹配条件:"The quick brown fox jumps..."
// 不匹配:"The brown quick fox..."(词序错误)、"quick and brown fox..."(位置没有连续)

slop 参数:允许间隔距离

// 允许词项间最多间隔 2 个词
GET /documents/_search
{
  "query": {
    "match_phrase": {
      "text": {
        "query": "quick fox",
        "slop": 2
      }
    }
  }
}
// 文档内容:"the quick brown fox jump,

multi_match

相关文档

全文检索技术官网 Query DSL

posted @ 2025-12-02 18:02  千千菌  阅读(3)  评论(0)    收藏  举报