【发布时间】:2018-11-15 05:13:26
【问题描述】:
我在 SO 中看到了很多问题,并阅读了有关“过滤器被缓存”的文档,而查询没有被缓存,“查询应用于所有值”和“如果在查询之外,则在查询后应用过滤器”对象”等。
底线是文档很烂,而且 DSL 很难掌握。我正在尝试优化一些查询并使用 kibana 开发工具搜索分析器,但是我的本地数据集必须太小而无法测量实际的性能差异(我在两个方向上都得到了结果)而且我没有测试具有多个节点的集群,用于处理真实的大型数据集。
在这种简单的情况下,所有查询都将返回相同的结果。我想了解其中的区别,以及为什么在任何允许将子句放入过滤器的情况下,您更喜欢查询而不是过滤器
GET foo11/_search
{
"query": {
"bool": {
"filter": {
"match" : {
"in_stock" : true
}
}
}
}
}
GET foo11/_search
{
"query": {
"bool": {
"filter": {
"term" : {
"in_stock" : true
}
}
}
}
}
GET foo11/_search
{
"query": {
"bool": {
"must": {
"match" : {
"in_stock" : true
}
}
}
}
}
这3种情况在性能上有什么区别?我真的可以证明一个比另一个更好/更差吗?
有什么区别:
"match" : {
"in_stock" : true
}
对比
"term" : {
"in_stock" : true
}
【问题讨论】:
标签: elasticsearch lucene elasticsearch-dsl