首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“普通”术语查询与使用筛选器的术语查询之间的区别

“普通”术语查询与使用筛选器的术语查询之间的区别
EN

Stack Overflow用户
提问于 2015-01-30 11:34:24
回答 1查看 189关注 0票数 1

我正在努力理解以下两者之间的区别:

  • 一个“普通”的elasticsearch查询,它将匹配术语查询并返回一定数量的点击量。
  • 以及筛选的查询(因此使用筛选器),该查询将返回相同的命中次数。

下面是术语查询:

代码语言:javascript
复制
GET _search
{
   "query": {
      "terms": {
         "childcareTypes": [
            "SOLE_CHARGE",
            "OUT_OF_SCHOOL",
            "BABY_SITTING"
         ],
         "minimum_match": 3
      }
   }
}

下面是过滤的版本:

代码语言:javascript
复制
GET _search
{
   "query": {
      "filtered": {
         "filter": {
            "terms": {
               "childcareTypes": [
                  "SOLE_CHARGE",
                  "OUT_OF_SCHOOL",
                  "BABY_SITTING"
               ],
               "execution": "and"
            }
         }
      }
   }
}

两者返回的总点击量为8000次(相对于我的索引)。

以下是“普通”术语查询的结果:

代码语言:javascript
复制
{
   "took": 7,
   "timed_out": false,
   "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
   },
   "hits": {
      "total": 8000,
      "max_score": 5.134171,
      "hits": [
         {
            "_index": "bignibou",
            "_type": "advertisement",
            "_id": "AUs2T2lt3L5LNr7nkot2",
            "_score": 5.134171,
            "_source": {
               "childcareWorkerType": "AUXILIAIRE_PARENTALE",
               "childcareTypes": [
                  "SOLE_CHARGE",
                  "OUT_OF_SCHOOL",
                  "BABY_SITTING"
               ],
               "address": {
                  "latitude": 48.8532558,
                  "longitude": 2.36584
               },
               "giveBath": "EMPTY"
            }
         },
         ...

以下是“筛选”查询的结果:

代码语言:javascript
复制
{
   "took": 3,
   "timed_out": false,
   "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
   },
   "hits": {
      "total": 8000,
      "max_score": 1,
      "hits": [
         {
            "_index": "bignibou",
            "_type": "advertisement",
            "_id": "AUs2T2lt3L5LNr7nkot2",
            "_score": 1,
            "_source": {
               "childcareWorkerType": "AUXILIAIRE_PARENTALE",
               "childcareTypes": [
                  "SOLE_CHARGE",
                  "OUT_OF_SCHOOL",
                  "BABY_SITTING"
               ],
               "address": {
                  "latitude": 48.8532558,
                  "longitude": 2.36584
               },
               "giveBath": "EMPTY"
            }
         },
         ....

,那么两者之间有什么区别呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-30 12:16:39

这与查询、filters (这里有更多的信息)之间的差异有关。

在您的示例中,与terms查询不同,terms筛选器:

  • 缓存了吗?
  • 不计算分数:所有匹配的文档都有相同的_score为1(请看结果)

因此,最大的区别是filtered查询将比“普通”terms查询更快。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28235025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档