1. 什么是 DSL?
- DSL 是 领域特定语言(Domain-Specific Language) 的简称。
- 定义:DSL 是专为某一特定领域设计的计算机语言,相较于通用语言(如 Java、Python 等),DSL 更加聚焦,适用于特定领域的操作。
- 示例:
- SQL 是一种用于数据库查询的 DSL。
- 正则表达式是一种用于文本匹配的 DSL。
2. Elasticsearch 是一种 DSL 吗?
- 回答:是的,Elasticsearch 的查询语法可以被视为一种 DSL,称为 Query DSL。
- Query DSL 的特点:
- 领域特定:专注于搜索和数据分析领域。
- 基于 JSON:使用 JSON 格式构建查询。
- 表达力强:支持复杂搜索和聚合操作。
3. Elasticsearch 的 Query DSL
Query DSL 是 Elasticsearch 提供的核心查询方式,用于执行搜索和数据操作。
3.1 组成
-
叶子查询(Leaf Queries)
- 定义:直接针对文档的字段进行匹配。
- 常见类型:
match
:全文匹配。term
:精确匹配。range
:范围查询。
示例:
{ "query": { "term": { "status": "active" } } }
-
复合查询(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 的区别
float
和 double
是两种浮点类型,它们的区别主要体现在以下几个方面:
特性 | 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 的区别
byte
和 short
是两种整数类型,主要区别如下:
特性 | byte | short |
---|---|---|
存储空间 | 1字节(8位) | 2字节(16位) |
表示范围 | -128 到 127 | -32,768 到 32,767 |
默认类型 | 否 | 否 |
使用场景 | 二进制数据处理 | 较小范围的整数运算 |
运算提升 | 自动提升为 int |
自动提升为 int |
注意:byte
和 short
在算术运算时会自动提升为 int
,结果需要显式转换回 byte
或 short
。
示例代码:
byte b1 = 50;
byte b2 = 50;
byte sum = (byte) (b1 + b2); // 强制转换为 byte