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,
浙公网安备 33010602011771号