我想像这样做一个ElasticSearch查询:
{
"query" :
{
"bool" :
{
"filter" : [
{
"terms" :
{
"name" : ["name1", "name2"]
}
},
{
"terms" :
{
"color" : ["orange", "red"]
}
}
]
}
}
}
我试图像这样在NEST中实现它:
_elasticClient
.SearchAsync<MyDocument>(s =>
s.Index("myindex")
.Query(q => q
.Bool(bq => bq
.Filter(fq =>
{
QueryContainer query = null;
if (nameList.Any()) {
query &= fq.Terms(t => t.Field(f => f.Name).Terms(nameList));
}
if (colorList.Any()) {
query &= fq.Terms(t => t.Field(f => f.Color).Terms(colorList));
}
return query;
})
)
)
);
但这给了我这样的查询,其中的过滤器包装在 布尔值中 :
{
"query" :
{
"bool" :
{
"filter" : [
{
"bool" :
{
"must" : [
{
"terms" :
{
"name" : ["name1", "name2"]
}
},
{
"terms" :
{
"color" : ["orange", "red"]
}
}
]
}
}
]
}
}
}
我应该如何更改我的NEST代码以提供正确的查询?是否必须将我的条款添加到 QueryContainer之外的 其他项目中?
如果要检查条件过滤器,可以在查询之前创建过滤器列表,如下所示:
var nameList = new[] {"a", "b"};
var colorList = new[] {1, 2};
var filters = new List<Func<QueryContainerDescriptor<MyDocument>, QueryContainer>>();
if (nameList.Any())
{
filters.Add(fq=> fq.Terms(t => t.Field(f => f.Name).Terms(nameList)));
}
if (colorList.Any())
{
filters.Add(fq => fq.Terms(t => t.Field(f => f.Color).Terms(colorList)));
}
ISearchResponse<Property> searchResponse =
elasticClient.Search<MyDocument>(x => x.Query(q => q
.Bool(bq => bq.Filter(filters))));
如果在进行过滤器查询之前不需要检查任何条件,则可以使用类似的方法:
ISearchResponse<MyDocument> searchResponse =
elasticClient.Search<MyDocument>(x => x.Query(q => q
.Bool(bq => bq
.Filter(
fq => fq.Terms(t => t.Field(f => f.Name).Terms(nameList)),
fq => fq.Terms(t => t.Field(f => f.Color).Terms(colorList))
))));
问题内容: 我正在尝试使用Pandas在几个条件下进行布尔索引。我原来的DataFrame称为。如果执行以下操作,将得到预期的结果: 但是,如果我这样做(我认为应该是等效的),则不会返回任何行: 知道导致差异的原因是什么? 问题答案: 使用是因为运算符优先级: 或者,在单独的行上创建条件: 样品 :
问题内容: 在我当前的项目中,我遇到了使用hibernate条件查询获取实体的问题。我有以下实体: 教授,其中包含学生名单 学生,其中包含作业列表。 作业,其中包含分配到的学生的ID。 现在,我想获得与教授有关的所有作业,即教授分配给他的学生的所有作业。 此查询显示我要在条件查询中实现的内容。 如何使用hibernate条件API实施此查询? 问题答案: 假设您的表格是这样的: 使用别名的简单示例
问题内容: 谁能向我解释为什么我对这两个表达式会得到不同的结果?我正在尝试在2个日期之间进行过滤: 结果:37M 与 结果:25M 它们有何不同?在我看来,他们应该产生相同的结果 问题答案: TL; DR 要传递多个条件或使用对象和逻辑运算符(,,)。请参见Pyspark:when子句中的多个条件。 您还可以使用 单个 SQL字符串: 实际上,在以下两者之间使用更有意义: 第一种方法甚至不是远程有
问题内容: 在Google上搜索后,我发现Elasticsearch的最大查询条件限制为1024? 它是可配置的吗?如果可以,请提供任何步骤。 谢谢,Sameer 问题答案: 默认值为1024,但是它是可配置的。在elasticsearch配置文件(例如yml文件)中,设置提及的设置:例如。
问题内容: 有时你想过滤具有多个条件的a: 或者你可以做同样的复杂条件和单 filter: 我的猜测是第二种方法具有更好的性能特征,但我不知道。 第一种方法赢得了可读性,但是哪种性能更好? 问题答案: 两种选择都必须执行的代码是如此相似,以致你无法可靠地预测结果。底层的对象结构可能有所不同,但这对热点优化器没有挑战。因此,这取决于其他周围条件,如果有任何差异,它们将使执行速度更快。 组合两个过滤器
有时您希望筛选具有多个条件的: 也可以使用复杂条件和单个: 第一种方法在可读性方面胜出,但在性能方面,什么更好呢?