Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.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
<img src="//i.stack.imgur.com/RUiNP.png" height="16" width="18" alt="" class="sponsor tag img">elasticsearch ElasticSearch查询优化器是否理解`{from:null,to:null}`时间范围筛选器是不可操作的?_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Query Optimization - Fatal编程技术网 elasticsearch ElasticSearch查询优化器是否理解`{from:null,to:null}`时间范围筛选器是不可操作的?,elasticsearch,query-optimization,elasticsearch,Query Optimization" /> elasticsearch ElasticSearch查询优化器是否理解`{from:null,to:null}`时间范围筛选器是不可操作的?,elasticsearch,query-optimization,elasticsearch,Query Optimization" />

elasticsearch ElasticSearch查询优化器是否理解`{from:null,to:null}`时间范围筛选器是不可操作的?

elasticsearch ElasticSearch查询优化器是否理解`{from:null,to:null}`时间范围筛选器是不可操作的?,elasticsearch,query-optimization,elasticsearch,Query Optimization,我使用的是ElasticSearch 1.5.2 在Java中,我编写了如下查询: publicquerybuilder组合序列( 字符串品牌, 弦积, /**包含的,可为空的*/ 即时启动, /**包含的,可为空的*/ 瞬间结束 ) { final QueryBuilder nominalQuery=QueryBuilders.boolQuery() .must(QueryBuilders.matchQuery(“品牌”,品牌)) .must(QueryBuilders.matchQuery(

我使用的是ElasticSearch 1.5.2

在Java中,我编写了如下查询:

publicquerybuilder组合序列(
字符串品牌,
弦积,
/**包含的,可为空的*/
即时启动,
/**包含的,可为空的*/
瞬间结束
) {
final QueryBuilder nominalQuery=QueryBuilders.boolQuery()
.must(QueryBuilders.matchQuery(“品牌”,品牌))
.must(QueryBuilders.matchQuery(“产品”,产品));
应用范围为的最终查询生成器;
if(start==null&&end==null){
withRangeApplied=nominalQuery;
}否则{
最终rangeFilter构建器rangeFilter
=FilterBuilders.rangeFilter(“时间戳”);
gte(启动);
lte(结束);
withRangeApplied=QueryBuilders.filteredQuery(
名词查询,
范围滤波器);
}
应用范围内的返回;
}
但是我不喜欢我必须做这个空检查。随着产品的发展,我们的代码库中会有很多这样的代码。我希望所有代码都遵循相同的路径,如下所示:

publicquerybuilder组合序列(
字符串品牌,
弦积,
/**包含的,可为空的*/
即时启动,
/**包含的,可为空的*/
瞬间结束
) {
final QueryBuilder nominalQuery=QueryBuilders.boolQuery()
.must(QueryBuilders.matchQuery(“品牌”,品牌))
.must(QueryBuilders.matchQuery(“产品”,产品));
最终rangeFilter构建器rangeFilter
=FilterBuilders.rangeFilter(“时间戳”);
gte(启动);
lte(结束);
返回QueryBuilders.filteredQuery(
名词查询,
范围滤波器);
}
这意味着我们不必要地在查询上强加一个
{start:null,end:null}
范围过滤器。这会为ElasticSearch带来额外的工作吗

我使用Profile API(在一个具有类似索引和映射的空ES2.4.1数据库上——这不是一个公平的测试,但是我唯一可用的资源)询问有关查询的一些问题

{start:null,end:null}
在查询计划中显示为:

{
    query_type: "MultiTermQueryConstantScoreWrapper",
    lucene: "timestamp:[* TO *]",
    time: "0.0003ms",
    breakdown: {
        create_weight: 344
    }
}
这个时间比我的“TermQuery”元素小一个数量级。这对我来说是一个相对便宜的过滤器。然而,“非空过滤器”具有完全相同的、微小的时间成本。所以我不相信这是不可能的

此“空筛选器”的存在并没有增加重写时间(与“无筛选器”相比)

而“非空过滤器”的重写时间是“空过滤器”或“空过滤器”的两倍


从这些结果来看:我相信“空过滤器”比“无过滤器”增加的工作量可以忽略不计(事实上,与“非空过滤器”增加的成本可以忽略不计)。有谁能更确切地证实这种无操作滤波器是便宜的(或者是经过优化的)?

这并不能回答这个问题,但是
lte(开始)
应该是
lte(结束)
。。。我只是想提一下这并不能回答这个问题,但是
lte(开始)
应该是
lte(结束)
。。。我只是想提一下