1. 什么是 DSL?


2. Elasticsearch 是一种 DSL 吗?


3. Elasticsearch 的 Query DSL

Query DSL 是 Elasticsearch 提供的核心查询方式,用于执行搜索和数据操作。

3.1 组成
  1. 叶子查询(Leaf Queries)

    • 定义:直接针对文档的字段进行匹配。
    • 常见类型:
      • match:全文匹配。
      • term:精确匹配。
      • range:范围查询。

    示例

    {
      "query": {
        "term": {
          "status": "active"
        }
      }
    }
  2. 复合查询(Compound Queries)

    • 定义:用于组合多个查询,形成更复杂的逻辑条件。
    • 常见类型:
      • bool:布尔查询,包含 must(必须)、should(可选)、must_not(排除)。
      • dis_max:选择多个查询中得分最高的结果。
      • constant_score:为查询结果赋固定分数。

    示例

    {
      "query": {
        "bool": {
          "must": [
            { "match": { "title": "Elasticsearch" } },
            { "term": { "status": "active" } }
          ],
          "must_not": [
            { "term": { "tag": "deprecated" } }
          ]
        }
      }
    }

4. float 和 double 的区别

floatdouble 是两种浮点类型,它们的区别主要体现在以下几个方面:

特性 float double
存储空间 4字节(32位) 8字节(64位)
精度 6~7 位有效数字 15~16 位有效数字
范围 ±3.4×10⁻³⁸ ~ ±3.4×10³⁸ ±1.7×10⁻³⁰⁸ ~ ±1.7×10³⁰⁸
默认类型 否(需要加 f
计算速度 较快 较慢
常见用途 图形计算、简单模型 科学计算、金融计算

示例代码

float f = 1.123456789f; // 需要加 f 后缀
double d = 1.123456789;

System.out.println(f); // 输出:1.1234568
System.out.println(d); // 输出:1.123456789

5. byte 和 short 的区别

byteshort 是两种整数类型,主要区别如下:

特性 byte short
存储空间 1字节(8位) 2字节(16位)
表示范围 -128 到 127 -32,768 到 32,767
默认类型
使用场景 二进制数据处理 较小范围的整数运算
运算提升 自动提升为 int 自动提升为 int

注意byteshort 在算术运算时会自动提升为 int,结果需要显式转换回 byteshort

示例代码

byte b1 = 50;
byte b2 = 50;
byte sum = (byte) (b1 + b2); // 强制转换为 byte