弹性搜索:使用查询或筛选查询进行术语,前缀或范围查询?

时间:2015-03-20 12:24:22

标签: caching elasticsearch scoring

我想知道是否应该将我的术语查询翻译成过滤后的查询来缓存结果并保持分数?

来自filtered query的文档:

  

过滤器通常比查询更快,因为:

     
      
  • 他们不必为每个文件计算相关性_score -   答案只是一个布尔“是的,文档匹配过滤器”或   “不,文档与过滤器不匹配”。
  •   
  • 大多数人的结果   过滤器可以缓存在内存中,使后续执行更快
  •   

另外,来自filters

  

某些过滤器已经产生了一个易于缓存的结果,并且   缓存和不缓存它们之间的区别是行为   是否将结果放在缓存中。这些过滤器包括   术语,术语,前缀和范围过滤器默认是缓存的   建议使用(与等效查询版本相比)时   相同的过滤器(相同的参数)将用于多个   不同的查询(例如,年龄大于的年龄范围过滤器   10)。

我的解决方案是,我会将术语查询放在过滤后的查询中,其中"查询"和"过滤"谓词是一样的。 我想我当时拥有两全其美,得分和缓存。这有道理吗?

示例查询:

{
  "_source":true,
  "query":{"term":{"displayName":"example name"}}
}

优化过滤查询:

{
  "_source":true,
  "query":
  {"filtered":
   {"query":{"term":{"displayName":"example name"}},
    "filter":{"term":{"displayName":"example name"}}
   }
  }
}

我已经对此进行了测试,但没有注意到一些性能提升。由于我必须事先写下很多搜索词,我想知道什么是最佳解决方案以及原因。

0 个答案:

没有答案