Performance 与查询匹配的过滤器
我有两种类型的查询。它们在逻辑上都是相同的,但是我不确定两者之间是否有任何性能差异 如果有人能启发我,我会很高兴的 使用Performance 与查询匹配的过滤器,performance,
elasticsearch,Performance,
elasticsearch,我有两种类型的查询。它们在逻辑上都是相同的,但是我不确定两者之间是否有任何性能差异 如果有人能启发我,我会很高兴的 使用match_all和filter: { "query": { "filtered": { "query": { "term": { "user_id": "1234567" } }, "filter": { "bool": { "must":
match_all
和filter
:
{
"query": {
"filtered": {
"query": {
"term": {
"user_id": "1234567"
}
},
"filter": {
"bool": {
"must": [
{
"range": {
"ephoc_date": {
"lt": 1437033590,
"gte": 1437026390
}
}
}
]
}
}
}
}
}
使用
术语
查询:
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"bool": {
"must": [
{
"term": {
"user_id": "1234567"
}
},
{
"range": {
"ephoc_date": {
"lt": 1437033590,
"gte": 1437026390
}
}
}
]
}
}
}
}
}
查看您的查询,您似乎不关心基于
user\u id
字段值为“1234567”的文档如何评分。我的意思是-如果多个文档的user\u id
设置为“1234567”,则不关心结果中文档的顺序。如果是这种情况,第二个选项在性能方面会更好,因为在第一个查询中有一些与评分相关的计算成本,而在第二个查询中没有评分。顺便说一下,您的第二个查询也可以简化为以下内容:
{
"filter": {
"bool": {
"must": [
{
"term": {
"user_id": "1234567"
}
},
{
"range": {
"ephoc_date": {
"lt": 1437033590,
"gte": 1437026390
}
}
}
]
}
}
}
但是
match\u all
query在性能方面不是很昂贵吗?在对文档应用过滤器之前,它不会加载整个文档吗?它不像您想象的那样工作。首先执行过滤器以获得匹配的文档集。query
就是在这组文档上工作的。您建议的简化查询的性能是否与我的第二个查询一样,哪两个查询都比第一个查询好?是的,简化查询的性能与第二个查询完全相同。