ElasticSearch-query和filter区别

 

1.query和filter方法

match_all查询所有的数据
term代表完全匹配,即不进行分词器分析,文档中必须包含整个搜索的词汇。
bool复合型查询,可以包含多个其他的查询条件,包括must,should,must_not等,还可以包含有filter,必须匹配,但它以不评分、过滤模式来进行
ids id字段查询
prefix前缀查询
range范围查询,针对date和number类型数据,gte,gt,lte,lt
terms多词语查询,如果要查询的字段索引为not_analyzed类型,则terms查询非常类似于关系型数据库中的in查询
wildcard

通配符查询,*任意(包括0)个字符,?任意一个字符

通配符查询不太注重性能,在可能时应尽量避免,特别是要避免前缀通配符

regexp正则表达式查询, .标识任意一个字符
match对一个字段选择合适的分析器,传给match查询的词条将被建立索引时相同的分析器处理。
先检查字段类型是否是analyzed,如果是,则先分词,再去匹配token;如果不是,则直接去匹配token。
match不支持多条件查询
exists存在查询,询指定字段至少包含一个非null值的数据,如果字段索引为not_analyzed类型,则查询sql中的is not null查询方式,用field
missing 缺失值查询,与exists查询正好相反,用field

  

 

 

 

 

 

 

 

 

 

 

 

 

 

         

在任何搜索中使用过滤器,只需在于query节点相同级别上添加一个filter节点。如果你只想要过滤器,也可以完全省略query节点

2.query与filter对比

    1) query会计算每个document相对于搜索条件的相关度,并按照相关度进行排序;
        filter仅仅只是按照搜索条件过滤出需要的数据而已,不计算任何相关度分数;
    2) filter有内置的自动cache,可以通过设置_cache为true来缓存数据。如果下一次恰好以相同的查询条件进行查询并且该缓存没有过期,就可以直接从缓存中读取数据,这样就大大加快的查询速度
        query无法cache结果
    3) query查询速度慢,filter查询速度快
    4) query适合全文检索,比如检索包含run单词,如果包含这些单词:runs、running、jog、sprint,也被视为包含run单词
        filter适合精确搜索,比如创建日期是否在2013-2014年间、status字段是否为yes

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值