Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用过滤器、查询或两者的混合优化elasticsearch查询 - Fatal编程技术网

使用过滤器、查询或两者的混合优化elasticsearch查询

使用过滤器、查询或两者的混合优化elasticsearch查询,
Warning: implode(): Invalid arguments passed in /data/phpspider/zhask/webroot/tpl/detail.html on line 45
,,我试图提高elasticsearch查询的性能。查询的目标只是检索那些与查询匹配的文档,所以分数并不重要,重要的是我们每天都有一个索引,所以查询。据我所知,在这种情况下,最好使用filter,避免计算分数,但我刚才指出,在检索所有文档分数1的查询中,使用finter有一些替代方法,因此我进行的第一个查询如下: { "filter": { "bool": { "must": [{ "match": { "from": "john.doe@example.com"

我试图提高elasticsearch查询的性能。查询的目标只是检索那些与查询匹配的文档,所以分数并不重要,重要的是我们每天都有一个索引,所以查询。据我所知,在这种情况下,最好使用filter,避免计算分数,但我刚才指出,在检索所有文档分数1的查询中,使用finter有一些替代方法,因此我进行的第一个查询如下:

{
 "filter": {
  "bool": {
   "must": [{
     "match": {
      "from": "john.doe@example.com"
     }
    }, {
     "range": {
      "receivedDate": {
       "gte": "date1",
       "lte": "date2"
      }
     }
    }
   ]
  }
 }
}
然后我做了我的第一个测试,我为查询更改了过滤器,大多数时候我使用查询然后过滤器获得了更好的效果,这是我的第一个问题,为什么?在我的查询中,有什么错误使筛选比查询慢

之后,我继续阅读,试图改进它,我得到了以下结果:

{
    "query": {
        "bool": {
            "must": {
                "match_all": {}
            },
            "filter": {
                "bool": {
                    "must": [{
                            "match": {
                                "from": "john.doe@example.com"
                            }
                        }, {
                            "range": {
                                "receivedDate": {
                                    "gte": "date1",
                                    "lte": "date2"
                                }
                            }
                        }
                    ]
                }
            }
        }
    }
}

对于后者,我的印象有所改善。所以根据你的经验,你能告诉我哪一个更好——至少在理论上更好——以获得更快的结果,同时也存在使用其中一个查询缓存结果的可能性,从而改进向前的查询。有更好的方法进行此查询吗?提前感谢你的帮助。我忘了提到我正在使用Elasticsearch v2.3,在您的第一个查询中,您只使用了post_过滤器。您的第二个查询是要做的,但它可以优化为这样,无需将bool/filter包装在bool/must中:


from字段的映射是什么?我忘了提到我也在测试term的change match Sencee,因为字段没有被分析,据我所知,这将改进它。所以from字段是字符串未分析的,receivedDate是date,这方面有什么进展吗?
{
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "receivedDate": {
              "gte": "date1",
              "lte": "date2"
            }
          }
        },
        {
          "term": {
            "from": "john.doe@example.com"
          }
        }
      ]
    }
  }
}