ElasticSearch笔记系列(10)——子条件查询(下)Filter context

Query与Filter

查询在Query查询上下文和Filter过滤器上下文中,执行的操作是不一样的:

Query查询上下文:

在查询上下文中,查询关注的问题时:“这个文档匹不匹配这个查询,它的相关度高么?”

如何验证匹配很好理解,如何计算相关度呢?之前说过,ES中索引的数据都会存储一个_score分值,分值越高就代表越匹配。另外关于某个搜索的分值计算还是很复杂的,因此也需要一定的时间。

查询上下文 是在 使用query进行查询时的执行环境,比如使用search的时候。

Filter过滤器上下文:

在过滤器上下文中,查询关注的问题时:“这个文档匹不匹配?”

答案很简单,是或者不是。它不会去计算任何分值,也不会关心返回的排序问题,因此效率会高一点。

过滤上下文 是在使用filter参数时候的执行环境,比如在bool查询中使用Must_not或者filter。

213832_gAY6_1156339.png

本文在在前文介绍Query查询的基础上,继续介绍Filter查询。

简单的说,Query查询和Filter查询的区别:

区别1

Filter:在查询过程中,Filter只判断该文档是否满足条件,只有YES或者NO。

Query:除了问YES或NO,还会问匹配的程度。

区别2

FIlter就是用来做数据过滤的,ES会对它的结果进行缓存,所以相较于Query而言Filter的速度会更快一些。

 

示例

Filter需要结合另一个关键词bool来实现,用到bool和filter两个关键词。

POST http://localhost:9200/rent/community/_search

{
	"query":{
		"bool":{
			"filter":{
				"term":{
				"creationdate":"2015-01-01"
				}
			}
		}
	}
}

我们查询一下,发现第一次的时间相对稍长,took为200+ms。之后因为filter context的本身原理,刚才说的,ES对其其结果进行缓存,再次查询只用了8ms

{
    "took": 8,
    "timed_out": false,
    "_shards": {
        "total": 3,
        "successful": 3,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 3,
        "max_score": 0,
        "hits": [
            {
                "_index": "rent",
                "_type": "community",
                "_id": "AWLZD_9YoILHeA4gRvWC",
                "_score": 0,
                "_source": {
                    "communityname": "万科公园大道",
                    "city": "上海老闵行",
                    "age": 3,
                    "creationdate": "2015-01-01 00:00:00"
                }
            },
            {
                "_index": "rent",
                "_type": "community",
                "_id": "AWLZFA5EoILHeA4gRvWF",
                "_score": 0,
                "_source": {
                    "communityname": "金地艺境(松江)",
                    "city": "上海松江区",
                    "age": 3,
                    "creationdate": "2015-01-01 00:00:00"
                }
            },
            {
                "_index": "rent",
                "_type": "community",
                "_id": "AWLZGGD2oILHeA4gRvWJ",
                "_score": 0,
                "_source": {
                    "communityname": "保利艾庐",
                    "city": "上海浦东新区周浦镇",
                    "age": 3,
                    "creationdate": "2015-01-01"
                }
            }
        ]
    }
}

本文出自oschina博主happybks的博文:https://my.oschina.net/happyBKs/blog/1799392

 

 

转载于:https://my.oschina.net/happyBKs/blog/1799392

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值