居然是你

es几个基础问题

Elasticsearch | 作者 redhat | 发布于2018年06月27日 | 阅读数:3730

随着对es的深入,发现自己对es的基本概念越来越模糊
 
请教各位
 
query与filter的区别
 
filter与term的区别
 
query与全文检索的关系
已邀请:

laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net

赞同来自: redhat

query和filter的区别:https://blog.csdn.net/laoyang3 ... 68757
 
1、针对问题1:
query的关注点:
1)是否包含?
确定文档是否应该成为结果的一部分.

2)相关度得分多少?
除了确定文档是否匹配外,查询子句还计算了表示文档与其他文档相比匹配程度的_score。

3)得分越高,相关度越高。
更相关的文件,在搜索排名更高。
 
filter的关注点:
1)是否包含?
确定是否包含在检索结果中,回答只有“是”或“否”。

2)不涉及评分。
在搜索中没有额外的相关度排名。

3)针对结构化数据。
适用于完全精确匹配,范围检索。
 
2、针对问题2:
term是检索方式的一种,针对关键词做精确匹配的检索方式。
term的使用方法:
"query":{
"term":{
"field":"value"}}
 
3、针对问题3:
query是检索的特定关键词;
全文检索是检索的一种方式,包含:matchquery, mathch_phrase等检索方式可实现全文检索。
 

zhangsan

赞同来自: redhat

我也是2周千刚接触的es,关于query和filter,filter和term的区别,也是我非常纠结的,到现在虽然感觉理解了一部分,但还是有些疑虑。
对于query和filter的纠结,我想主要来源于网上的各种教程额,乱七八糟,使用了不同的es版本,导致用法不一样,但经常有不注明针对那个版本。产生filter和term的区别的疑问,我是感同身受的,起因是因为这个帖子:[url=https://www.cnblogs.com/ghj1976/p/5293250.html]https://www.cnblogs.com/ghj1976/p/5293250.html,[/url]
它把term类的全归到了过滤,match类的全归到了query。给人的感觉就是:term,terms,range,exist,missing就是filter,match,match_all,multi_match等几个就是query,所以,term就是一种filter。
 
最近又看了es6.2.4的官网文档,并没有看到支持上述帖子言论的说法。
https://www.elastic.co/guide/e ... .html  官网对于query和filter定义的链接。
 
GET /_search
{
"query": {
"bool": {
"must": [
{ "match": { "title": "Search" }},
{ "match": { "content": "Elasticsearch" }}
],
"filter": [
{ "term": { "status": "published" }},
{ "range": { "publish_date": { "gte": "2015-01-01" }}}
]
}
}
}
上面是官网给的例子,filter是套在bool查询中的,和must,should,should_not平级,下面提几个我曾经的疑问,并给出我现在理解的答案。
1.must中只能是Full text queries? 
肯定不是,Term level queries也是可以的,亲测了几个。
2.filter中只能是Term level queries?
也不是的,亲测match是可以的,但是kibana在filter下Full text queries没有自动提示,我想是因为filter一般都是精确匹配,官方尽管支持,但也不建议全文匹配来做过滤
3.filter下的几个字句是AND的关系,假如我的过滤条件是OR的关系是不是还要千套一层bool查询?比如我的过滤条件是status是published或者publish_date大于2015-01-01。
事实是我嵌套了一层bool查询,确实实现了需求。
4.为什么写一个filter相对于query这么麻烦?
filter的应用我觉得还是很多的,单一的无过滤条件的全文检索的业务需求还是比较少把。可是filter的写法却麻烦了不少。这是我完全想不明白的一点。。

要回复问题请先登录注册