elasticsearch---search in depth之full-text search
来源:互联网 发布:大庆电视台网络直播 编辑:程序博客网 时间:2024/05/21 09:48
full-text中两个关键因素:analyzed和relevance。
1:term-based or full-text
query可以划分两类:term-based-query和full-text-query。
term-based-query:低级别的query,比如term-query,fuzzzy-query等。这些都是直接操作inverted-index。不存在analysis的过程。
full-text-query:高级query。比如match-query,querystring等。这些query是知晓mapping的,因此,如果你是作用于一个date-field,则你输入的查询条件自动当成date类型处理。
如果你作用于一个not-analyzed的field,则你输入的查询条件就会当做一个完成的term,如果是一个analyzed的field,则会翻译成几个term。一旦翻译成一个term-list,就会转变成地级别的查询执行,然后汇总结果。
2:match_query
match_query是一种高级查询。因此是知晓mapping的,有analysis这个过程。
比如一个查询 query : { "match" : {"title" : "quick!"}}.执行过程如下
(1)获得field-type.这里title是string类型。
(2)analysis这个string:去掉!
(3)获取匹配的doc
(4)根据算法计算score
3:multi-word query
类似与单个term的match-query。只不过变成了多个term,执行过程其实是翻译成多个term-query,然后用一个bool-query包装起来,可以指定operator,也可以控制匹配的准确度,比如一个qurery翻译成多个term,则指定minimun_should_match来决定要匹配到的百分比。
4:combineing query
可以把各个相关的query通过bool-query包装起来完成复杂的查询。跟filter不同。filter只有两方面选择,要么包含,要么不包含。query则是计算相关性的。比如一个bool-query,有must,must_not,should组合而成,should部分是可以包含也可以不包含的,只是包含的部分相关性会更强一些,score更高,而在filer中,这部分信息是不会有的。这个情形下,score的计算规则是:所有match到的must和should子查询的score相加,然后除以总共must和should子查询的个数。must_not只是起到排除doc的作用,不计算得分。
5:how match use bool query
不再赘述。
6:boosting query clause
通过调整boost参数,来控制每一个子查询的权重。
7:control analysis
不多赘述。可以在不同层面配置分析器。在查询和索引过程中,应用顺序稍有差别。
查询和索引过程一般用一致的分析器,当然根据需求也可以不一样。
8:relevance is broken
看上去是出问题了。。。。其实不然。
当数据量很少的时候会出现诡异现象,相关性强的居然score值低。根据TF/IDF算法,term在一个doc中出现的频率越高,得分越高,term在整个index中出现的频率越高,得分越低(说明这个term很普遍,不是关键信息)。在数据量很少的时候会出现偏差,因为es默认计算标准并不是整个index,而是针对单个shard。懂了吧。数据量少,term分布不均匀,就会出现上述情况。在数据量多的情况下,这种偏差可以忽略了,因为整体计算跟单个shard计算差不多。当然可以指定查询方式,选在dfs*,可以强制不在单个shard上计算,而是整体计算。但是不推荐这么做,代价高意义也不大。
- elasticsearch---search in depth之full-text search
- elasticsearch---search in depth之struct search
- elasticsearch---search in depth之Proximity matching
- elasticsearch---search in depth之Partial matching
- elasticsearch---search in depth之controlling relevance
- elasticsearch---search in depth之multi-field search
- From MySQL full-text search to Elasticsearch
- full-text search
- full-text search examples
- Full Text Search
- Full-text Search for SQLite
- SQL Full Text Search service
- 全文搜索 full-text search
- elasticsearch之Search API
- [ElasticSearch]Search之分页
- elasticsearch之query-----执行Search
- elasticsearch之search-guard安装
- ES的多种搜索机制:query string search,query DSL,query filter,full-text search,phrase search,highlight search
- zoj 1649 bfs
- "undefined reference to" 问题解决方法
- mvc验证
- Webservice接口通用实现
- OpenStack Neutron源码分析:ovs-neutron-agent启动源码解析
- elasticsearch---search in depth之full-text search
- 20140919 N2
- Storm学习笔记摘录~~~不断更新中...
- android 关于第三方lib打包出现的问题:ResClass is not initialized
- 需要看的文章
- setObject()用法
- hibernate JPA @OneToOne双向关联共享主键
- 关于linux安装phpMyAdmin的JSON和mbstring问题
- 工作习惯问题