ElasticSearch(二) 关于DSL
关于Lucene里面的查询评分,其实是基于一个公式:TF/ IDF(Term-Frequency/ Inverse Document Frequency),词频率/ 倒排文档频率,这个公式讲了一个故事,就是一个不具备区分度的词,就是它的在各个文档中都有出现(在每个文档中出现次数并不重要),那么这个词就不具备区分度,这个词的权重也就越低,这个就是倒排文档频率的概念。
关于查询改写
我们知道ES是基于Lucene的,对上提供了良好的接口和简易的DSL,但是其实es是做了解析的,其中一种解析是可以通过指定的,这个就是"查询改写";
Scoring_boolean:针对每个文档打分,每个词生成一个should从句,这种改写最耗费CPU,因为需要大量的计算;
Const_score_boolean:这个不再是基于从句的计算,而是基于boost,还记得我们在上一篇文章中有讲到文档的norm的概念,它是基于文档在索引时候的boost值来生成的;那么这个计算过程也是通过计算文档的boost值来获得的。
Top_term_N:和scoring_boolean很类似,每个词项将会被翻译长should查询子句;但是只是保留前N个最佳的词项;那么这个最佳词项的计算是怎么来的?是不是最多只会有N个查询子句?
Top_term_boost_N:和Top_term_N和类似,但是这种并不计算分数(和const_score_boolean类似)。
curl -XGET 'localhost:9200/clients/client/1/_explain?pretty' -d '{
"query" : {
"prefix" : {
"name" : {
"prefix" : "j",
"rewrite" : "constant_score_boolean"
}
}
}
}'
关于查询模板
查询模板,就是可以通过定制一套模板,设定一些占位符,然后通过parameter节点来为这些占位符赋值的方式:

Es的模板式基于musttache模板引擎来制作的;可以基于这些模板来实现条件,循环以及指定默认值等逻辑。
关于过滤器
过滤器不评分,只是过滤,所以检索性能比较好,但是相关性差;
查询(query)有评分环节,所以检索性能比较差,但是相关性好。
过滤器的实现和servlet的过滤器是一样的,都是一个过滤器链,逐条去走。每个过滤器都是基于上一个过滤器检索的条件进行处理;那些"很重"的过滤要考虑放到过滤链的后面;
关于查询分类
1.基本查询,match,match_all等,只有查询索引一个目的;通常是其他复杂查询的一部分。
2.组合查询,bool以及dismax,前者是子查询的分数之和作为文档的分数,后者则是子查询分数最大的那个起到关键作用(从名字上其实可以看出来)。
3.无分析查询,查询不会被ES解析,而是直接传递到lucene做处理,这类查询基本就是把ES当成NoSql来使用;term查询,prefix查询以及wildcard查询等;另外,可以通过对于停用词的二次处理实现高效检索,所谓停用词是指一些类似于"a","the",汉语里面的"啊","也"之类的虚词,介词他们在查询中权重并不高;索性第一轮查询屏蔽到这类停用词,对与权重搞得词做一个查询并打分,然后再针对停用词做一次过滤,只是查询而不计算得分,减少计算量;
4.全文检索,直接使用lucene的查询机制以及查询语法;这类检索比较适合类似于google那种功能,查询结构由用户输入;match,multi_match,simple_query_string以及query_string等;
5.模式匹配查询,prefix,正则,wildcard等;模式匹配计算很昂贵,慎用
6.相似度查询,fuzzy*, more_like*;
7.支持打分操作,可以自定义打分规则,boosting,constant_score,function_score,indices等;
8.位置敏感查询,指定词项之间的距离;match_phrase(可以通过制定splot来指定分词词汇之间的距离),span*;这类查询也是比较耗费cpu的,慎用。
9.结构敏感查询,ES的结构化文档,嵌套文档查询等;但是ES对于结构化的查询并不是专业。
ElasticSearch(二) 关于DSL的更多相关文章
- 利用kibana学习 elasticsearch restful api (DSL)
利用kibana学习 elasticsearch restful api (DSL) 1.了解elasticsearch基本概念Index: databaseType: tableDocument: ...
- ElasticSearch的 Query DSL 和 Filter DSL
Elasticsearch支持很多查询方式,其中一种就是DSL,它是把请求写在JSON里面,然后进行相关的查询. Query DSL 与 Filter DSL DSL查询语言中存在两种:查询DSL(q ...
- ElasticSearch(二)CentOs6.4下安装ElasticSearch
一.准备工作 Elastic 需要 Java 8 环境.如果你的机器还没安装 Java,先需要安装java环境,同时还注意要保证环境变量JAVA_HOME正确设置. 链接:https://pan.ba ...
- elasticsearch 搜索提示DSL
1,创建mapping: PUT /news_website { "mappings": { "news" : { "properties" ...
- DSL是什么?Elasticsearch的Query DSL又是什么?
1.DSL简介 DSL 其实是 Domain Specific Language 的缩写,中文翻译为领域特定语言.而与 DSL 相对的就是 GPL,这里的 GPL 并不是我们知道的开源许可证(备注:G ...
- elasticsearch 二、elasticsearch-head安装
简介 elastricsearch-head是用于elasticsearch群集浏览和交互的插件. 源码:https://github.com/mobz/elasticsearch-head (上图来 ...
- python查询elasticsearch(Query DSL) 实例
import datetime import sys import getopt import hashlib from elasticsearch import Elasticsearch &quo ...
- 【Elasticsearch学习】DSL搜索大全(持续更新中)
1.复合查询 复合查询能够组合其他复合查询或者查询子句,同时也可以组合各个查询的查询结果及得分,也可以从Query查询转换为Filter过滤器查询. 首先介绍一下Query Context和 Filt ...
- ElasticSearch的查询(二)
一.Query String search 添加测试数据 PUT test_search { "mappings": { "test_type": { &quo ...
随机推荐
- 24点小游戏app宣传文案
24点小游戏app宣传文案 游戏背景 24点小游戏是传统的扑克牌游戏,是通过扑克牌来完成的竞争性智力游戏,除了希望能够消磨我们的空闲时间,加强同学们的临机和速算能力,还能够促进我们每个人的大脑和逻辑性 ...
- 团队作业8——敏捷冲刺博客合集(Beta阶段)
第一篇(冲刺前安排):https://www.cnblogs.com/Aragaki-Yui/p/9057951.html 第二篇(冲刺第一天):https://www.cnblogs.com/Ara ...
- java.lang.NoSuchMethodError: org.springframework.web.context.ConfigurableWebApplicationContext.getEnvironment()Lorg/springframework/core/env/ConfigurableEnvironment;问题
在springsecurity学习中,在加入spring有关的jar包后,出现java.lang.NoSuchMethodError: org.springframework.web.context. ...
- 第二十六课 典型问题分析(Bugfix)
问题1: glibc中的strdup实现如下: 没有对参数s进行空指针判断. 我们的Exception.cpp中应做改进: 在第12行进行判断空指针操作. 问题2: t1在析构时会抛出异常,我们在re ...
- HSTS 与 307 状态码
最近线上产品突然在 Chrome 浏览器上出现 307 状态码,并跳转到 https 版.由于 https 尚未部署完毕,导致了相当严重的后果. 但是 307 代码是什么含义呢?页面又为何会出现 30 ...
- ubuntu: firefox+flashplay
更新两步: 1.安装firefox:rm-->下载-->mv-->ln http://www.cnblogs.com/yzsatcnblogs/p/4266985.html 2. f ...
- Pycharm出现Segmentation fault...(interrupted by signal 11: SIGSEGV)的解决方法
众所周知,用pycharm远程服务器debug代码已经成为学习深度学习相关代码的有力工具,但是最近创建了一个虚拟环境,进行debug的时候,莫名会出现下面这个错误,看的我都抽风了 bash: line ...
- memoization
memoization 是指通过缓存函数返回结果来加速函数调用的一种技术.仅当函数是纯函数 时结果才可以被缓存,也就是说,函数不能有任何副作用或输出,也不能依赖任何全局状态 import math _ ...
- 利用sql语句进行增删改查
1.查询 函数:raw(sql语句) 语法:Entry.objects.raw(sql) 返回:QuerySet 2.增删改 from django.db import connection def ...
- MAC安装python jupyter notebook
介绍: Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言. Jupyter Notebook 的本质是一个 Web 应用 ...