【ElasticSearch】filter与query对比

待我称王封你为后i 2022-12-27 02:25 242阅读 0赞

对比filter与query的使用:
先插入两条数据:

  1. PUT /company/employee/2
  2. {
  3. "address": {
  4. "country": "china",
  5. "province": "jiangsu",
  6. "city": "nanjing"
  7. },
  8. "name": "tom",
  9. "age": 30,
  10. "join_date": "2016-01-01"
  11. }
  12. PUT /company/employee/3
  13. {
  14. "address": {
  15. "country": "china",
  16. "province": "shanxi",
  17. "city": "xian"
  18. },
  19. "name": "marry",
  20. "age": 35,
  21. "join_date": "2015-01-01"
  22. }

搜索请求:年龄必须大于等于30,同时join_date必须是2016-01-01

  1. GET /company/employee/_search
  2. {
  3. "query": {
  4. "bool": {
  5. "must": [
  6. {
  7. "match": {
  8. "join_date": "2016-01-01"
  9. }
  10. }
  11. ],
  12. "filter": {
  13. "range": {
  14. "age": {
  15. "gte": 30
  16. }
  17. }
  18. }
  19. }
  20. }
  21. }

对比:
filter:仅按照搜索条件过滤需要的数据,不计算任何相关度分数,对相关度没有任何影响
query:计算每个document相对于搜索条件的相关度,并按照相关度进行排序

如果需要将最匹配搜索条件的数据返回,用query
如果只需要筛选一部分数据,不关注排序,用filter

性能:
filter:不需要计算相关度分数,不需要按照相关度分数进行排序,同时还有内置的自动cache最常用filter的数据
query:计算相关度分数,按照分数进行排序,而且无法cache结果

发表评论

表情:
评论列表 (有 0 条评论,242人围观)

还没有评论,来说两句吧...

相关阅读