ElasticSearch 基本查询语法

query 查询: 模糊匹配,并对匹配出来的数据进行评分。

“took”: 查询花费的时间
_score: 匹配相识度评分 满分 5 分

常用查询:
全文本查询:针对文本
1、查询全部:match_all
2、模糊匹配: match (类似sql 的 like)
3、全句匹配: match_phrase (类似sql 的 = )
4、多字段匹配:muti_match (多属性查询)
5、语法查询:query_string (直接写需要配置的 关键字 )
6、字段查询 : term (针对某个属性的查询,这里注意 term 不会进行分词,比如 在 es 中 存了 “火锅” 会被分成 “火/锅” 当你用 term 去查询 “火时能查到”,但是查询 “火锅” 时,就什么都没有,而 match 就会将词语分成 “火/锅”去查)
7、范围查询:range ()
字段查询:针对结构化数据,如数字,日期 。。。

分页:
“from”: 10,
“size”: 10

constant_score: 固定分数。

filter: 查询: (query 属于类似就可以查出来,而 filter 类似 = 符号,要么成功,要么失败,没有中间值,查询速度比较快)

下面是 demo:
全局匹配:(默认返回10条)

GET 127.0.0.1:9200/shop-index/_search
    {
      "query": { "match_all": {}}
    }

POST 请求 ip:9200/shop/_search
match 匹配: title = “串串” 分页 from 10 共 size 10

{
  "query": {
    "match": {"title": "串"}
  },
  "from": 10,
  "size": 10
}

POST 请求 ip:9200/shop/_search
match 匹配: title = “串串” 排序 order = desc

{
  "query": {
    "match": {"title": "串"}
  },
  "sort": [
        {"id": {"order": "desc" }}
  ],
  "from": 10,
  "size": 10
}

mutil_match 查询:“query”: “串串”, 为要查寻的关键字,“fields”: [ “title”, “tag”] 从 title 和 tag 属性中去找。有一个匹配就算成功。

{
  "query": {
    "multi_match": {
      "query": "串串",
      "fields": [ "title", "tag"]
    }
  }
}

query_string 语法查询: “query”: “(关键字 and 关键字) or 关键字” 各种关键字 全局搜索

{
  "query": {
    "query_string": {
      "query": "(水煮肉 and 回锅肉) or 西葫芦"
    }
  }
}

query_string 可以限定 查询字段(默认查询所有字段)

{
  "query": {
    "query_string": {
      "query": "(水煮肉 and 回锅肉) or 西葫芦",
      "fields": ["title" ]
    }
  }
}

filter 查询:

{"query": {
    "bool": {
      "filter": {
        "term": {"id": "13"}
      }
    }
 }
}

constant_score: 固定分数。 (指定 boost 匹配分数是 2 的结果,默认不填是 1)
固定分数查询不支持 match 只支持 filter

{
  "query": {
    "constant_score": {
      "filter": {
        "match": {
          "title": "火锅"
        }
      },
      "boost": 2
    }
  }
}

bool 查询
must: 是 类似 and
must_not :不等于
should: 类似 or

{
  "query": {
    "bool": {
      "must": [
        {
         "match": {
            "title": "火锅"
          }
        },
        {
          "match": {
            "tag": "串串"
          }
        }
      ]
    }
  }
}

should 语法查询

{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "title": "串串"
          }
        },
        {
          "match": {
            "tag": "西葫芦"
          }
        }
      ]
    }
  }
}
### Elasticsearch SQL 查询语法 示例教程 Elasticsearch 提供了对 SQL 查询的支持,允许用户通过熟悉的 SQL 语法查询数据[^3]。以下是关于 Elasticsearch SQL 查询语法的详细说明和示例: #### 1. 基本查询 Elasticsearch SQL 支持使用标准的 SQL SELECT 语句来查询数据。以下是一个简单的查询示例,展示如何从索引中检索所有字段的数据: ```sql SELECT * FROM my_index; ``` 此查询将返回 `my_index` 索引中的所有文档[^3]。 #### 2. 指定字段查询 如果只需要查询某些特定字段,可以在 SELECT 子句中指定字段名称。例如: ```sql SELECT name, age FROM my_index; ``` 上述查询仅返回 `name` 和 `age` 字段的值。 #### 3. 条件过滤 可以使用 WHERE 子句添加条件过滤。例如,查询年龄大于 25 的文档: ```sql SELECT * FROM my_index WHERE age > 25; ``` 此外,还可以结合多个条件进行过滤。例如,查询年龄大于 25 且性别为男性的文档: ```sql SELECT * FROM my_index WHERE age > 25 AND sex = '1'; ``` #### 4. 排序 可以使用 ORDER BY 子句对结果进行排序。例如,按照年龄降序排列: ```sql SELECT * FROM my_index ORDER BY age DESC; ``` 如果需要指定缺失值的处理方式,可以使用 `MISSING` 关键字。例如,当 `age` 字段缺失时将其排在最前面: ```sql SELECT * FROM my_index ORDER BY age DESC MISSING '_first'; ``` #### 5. 分页 Elasticsearch SQL 支持分页查询,可以通过 LIMIT 和 OFFSET 子句实现。例如,查询前 10 条记录: ```sql SELECT * FROM my_index LIMIT 10; ``` 或者跳过前 10 条记录并查询接下来的 10 条记录: ```sql SELECT * FROM my_index LIMIT 10 OFFSET 10; ``` #### 6. 聚合查询 Elasticsearch SQL 还支持聚合操作。例如,统计每个城市的文档数量: ```sql SELECT city, COUNT(*) AS count FROM my_index GROUP BY city; ``` 此查询将返回每个城市对应的文档计数。 #### 7. 时间字段查询 对于时间字段,可以使用日期格式化功能。例如,查询发布日期在 2023 年之后的文档: ```sql SELECT * FROM my_index WHERE release_date > '2023-01-01'; ``` #### 8. 处理空值 可以使用 IS NULL 或 IS NOT NULL 判断字段是否为空。例如,查询 `city` 字段为空的文档: ```sql SELECT * FROM my_index WHERE city IS NULL; ``` #### 9. 自定义字段格式 可以使用 FORMAT 子句自定义字段的输出格式。例如,将日期字段格式化为特定格式: ```sql SELECT release_date FORMAT 'yyyy-MM-dd' FROM my_index; ``` ### 注意事项 - Elasticsearch SQL 查询需要启用 SQL 功能,并确保相关插件已安装[^5]。 - 查询性能可能受索引设计和数据量影响,建议优化查询语句以提高效率[^3]。 ```python # 示例:通过 Python 使用 Elasticsearch SQL API from elasticsearch import Elasticsearch es = Elasticsearch() response = es.sql.query(body={ "query": "SELECT * FROM my_index WHERE age > 25" }) print(response) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值