QElasticsearch支持很多查询方式,其中一种就是DSL,它是把请求写在JSON里面,然后进行相关的查询。
Query DSL 与 Filter DSL
DSL查询语言中存在两种:查询DSL(query DSL)和过滤DSL(filter DSL)。
它们两个的区别如下图:
query DSL
在查询上下文中,查询会回答这个问题——“这个文档匹不匹配这个查询,它的相关度高么?”
如何验证匹配很好理解,如何计算相关度呢?ES中索引的数据都会存储一个_score分值,分值越高就代表越匹配。另外关于某个搜索的分值计算还是很复杂的,因此也需要一定的时间。
查询上下文 是在 使用query进行查询时的执行环境,比如使用search的时候。
一些query的场景:
- 与full text search的匹配度最高
- 包含run单词,如果包含这些单词:runs、running、jog、sprint,也被视为包含run单词
- 包含quick、brown、fox。这些词越接近,这份文档的相关性就越高