DSL是什么?Elasticsearch的Query DSL又是什么?
1、DSL简介
DSL 其实是 Domain Specific Language 的缩写,中文翻译为领域特定语言。而与 DSL 相对的就是 GPL,这里的 GPL 并不是我们知道的开源许可证(备注:GNU通用公共许可证简称为GPL),而是 General Purpose Language 的简称,即通用编程语言,也就是我们非常熟悉的 Java、Python 以及 C 语言等等。
与 GPL 相对,DSL 与传统意义上的通用编程语言 C、Java 以及 Python 完全不同。通用的计算机编程语言是可以用来编写任意计算机程序的,并且能表达任何的可被计算的逻辑,同时也是图灵完备的。而DSL 并不是图灵完备的,它们的表达能力有限,只是在特定领域解决特定任务的。最常见的 DSL 包括 Regex 正则表达式以及 HTML & CSS:
(1)Regex正则表达式仅仅指定了字符串的 Pattern,其引擎就会根据 Pattern 判断当前字符串跟正则表达式是否匹配。正则表达式有自己的语法规范(元字符,运算符的优先级等),犹如一门微型语言,嵌入到通用编程语言 C、Java 以及 Python等里面。
(2)HTML 和 CSS 只是对 Web 界面的结构语义和样式进行描述,虽然它们在构建网站时非常重要,但是它们并非是一种编程语言,我们可以认为 HTML 和 CSS 是在 Web 中的领域特定语言。
(3)SQL也属于DSL,虽然可以定义变量和函数,但是不能编写任意的计算机程序,它就无法实现界面编程,而C、Java 以及 Python都可以。这就是DSL的特点,只面向特定领域。
2、DSL分类
DSL分为外部DSL及内部DSL两种。外部DSL有自己的特定语法、解析器和词法分析器等等,它们往往是一种小型的编程语言。与之相对的则是内部DSL。内部DSL其实更像是种别称,它代表一类特别API及使用模式。
James Gosling曾经说过:每个配置文件最终都会变成一门编程语言。一开始您可能只会用它表示一点点东西,慢慢地您便会想要一些规则,而这些规则则变成了表达式,后来您可能还会定义变量,进行条件判断等等,而最终它就变成了一种奇怪的编程语言,这样奇怪的语言就是 DSL 。
内部DSL,正像之前提到的那样,它往往只是代表了一系列特别的API及使用模式,例如Elasticsearch里面的Query DSL:
{
"query":{
"match_all":{}
}
}
由此可以看出来,内部DSL就是json的某种场景下的某种规范定义而已,并非一种真正的小型编程语言。
DSL是什么?Elasticsearch的Query DSL又是什么?的更多相关文章
- ElasticSearch的 Query DSL 和 Filter DSL
Elasticsearch支持很多查询方式,其中一种就是DSL,它是把请求写在JSON里面,然后进行相关的查询. Query DSL 与 Filter DSL DSL查询语言中存在两种:查询DSL(q ...
- python查询elasticsearch(Query DSL) 实例
import datetime import sys import getopt import hashlib from elasticsearch import Elasticsearch &quo ...
- Elasticsearch(入门篇)——Query DSL与查询行为
ES提供了丰富多彩的查询接口,可以满足各种各样的查询要求.更多内容请参考:ELK修炼之道 Query DSL结构化查询 Query DSL是一个Java开源框架用于构建类型安全的SQL查询语句.采用A ...
- Query DSL for elasticsearch Query
Query DSL Query DSL (资料来自: http://www.elasticsearch.cn/guide/reference/query-dsl/) http://elasticsea ...
- Elasticsearch Query DSL
Elasticsearch Query DSL By:授客 QQ:1033553122 1. match_all 1 2. match 2 3. match_phrase 5 4. match_phr ...
- Elasticsearch学习笔记(二)Search API 与 Query DSL
一. Search API eg: GET /mall/product/_search?q=name:productName&sort=price desc 特点:search的请求参数都是以 ...
- Elasticsearch Query DSL 整理总结(三)—— Match Phrase Query 和 Match Phrase Prefix Query
目录 引言 Match Phase Query slop 参数 analyzer 参数 zero terms query Match Phrase 前缀查询 max_expansions 小结 参考文 ...
- Elasticsearch Query DSL 整理总结(二)—— 要搞懂 Match Query,看这篇就够了
目录 引言 构建示例 match operator 参数 analyzer lenient 参数 Fuzziness fuzzniess 参数 什么是模糊搜索? Levenshtein Edit Di ...
- Elasticsearch Query DSL 整理总结(一)—— Query DSL 概要,MatchAllQuery,全文查询简述
目录 引言 概要 Query and filter context Match All Query 全文查询 Full text queries 小结 参考文档 引言 虽然之前做过 elasticse ...
随机推荐
- TP学习第二天—
一.控制器和对应方法的创建 2.路由解析 传统的路由解析方法: 具体url地址模式设置(配置文件在 ThinkPHP/Conf/convertion.php) 停到了之前的 黑马传智的 TP课,换了个 ...
- kali没有tcptraceroute如何安装
问题描述 尝试使用kali进行路由信息的收集,发现kali没有自带tcptraceroute.在网上搜索教程发现都是Linux下安装,且都是使用yum安装,看了一下发现kali用的也不是yum 这就很 ...
- 初接触matplotlib
1,绘制简单的折线图. 1 import matplotlib.pyplot as plt 2 3 square = [1,4,9,16,25] 4 5 plt.plot(square) 6 plt. ...
- webform中ajax.ajaxMethod使用方法
前言 dll文件 如果还没有ajax.dll文件,就先下载一个来 引用 将ajax.dll添加到项目引用中:在VS的解决方案资源管理器中右键点击项目名称--"添加项目引用"--浏览 ...
- Redis 设计与实现:数据库
本文的分析都是基于 Redis 6.0 版本源码 redis 6.0 源码:https://github.com/redis/redis/tree/6.0 服务器中的数据库 Redis 服务器将绝大部 ...
- Centos7 根目录存储空间扩展方法
Centos7 根目录存储空间扩展方法 一.首先通过 df -hl 命令查看磁盘占用情况,其中根目录已经被占满,此时需要对其进行扩容 二.针对虚拟机环境的centos7系统根存储空间扩容,可利 ...
- 干掉 powerdesigner,设计数据库表用它就够了
最近有个新项目刚过完需求,正式进入数据库表结构设计阶段,公司规定统一用数据建模工具 PowerDesigner.但我并不是太爱用这个工具,因为它的功能实在是太多了,显得很臃肿,而平时设计表用的也就那么 ...
- react脚手架抽离webpack报错解决
我们在写react项目的时候,可能原有的webpack配置不满足我们的需求,需要自己去配置,可是你在创建脚手架的时候并不能在外部找到webpack文件,脚手架的webpack文件在node_modul ...
- javascript中如何截取字符串?
JavaScript中截取字符串有三种方法,分别是substring(),substr(),split(). 方法1:使用substring() substring()方法用于提取字符串中介于两个指定 ...
- Trick:如何去掉html标签点击时的蓝色边框
我们在用html标签时,如input.button.select,img标签时,点击标签经常出现一个蓝色的边框,这个边框真的很low,想要去掉怎么办 其实,css有样式可以设置一下,这个问题就轻松 ...