使用过滤器、查询或两者的混合优化elasticsearch查询
我试图提高elasticsearch查询的性能。查询的目标只是检索那些与查询匹配的文档,所以分数并不重要,重要的是我们每天都有一个索引,所以查询。据我所知,在这种情况下,最好使用filter,避免计算分数,但我刚才指出,在检索所有文档分数1的查询中,使用finter有一些替代方法,因此我进行的第一个查询如下:使用过滤器、查询或两者的混合优化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"
{
"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"
}
}
]
}
}
}