elasticsearch - org.elasticsearch 6.4.3 来自嵌套字段的查询值,无论其级别如何
问题描述
我正在使用库 org.elasticsearch 6.4.3 并且无法升级到另一个库版本。我对 spring data elasticsearch 的了解非常基础。
我需要一个查询来检查条件条件字段名称是否为fullName
,但可以有多个嵌套条件条件。我下面只有3个级别。它可以出现在第 7 级或更高级别。
此外,这个解决方案真的很差,而且有些硬编码。我想问是否有办法缩短它,并且fullName
无论嵌套条件标准的级别如何,都可以搜索字段名称是否等于。
BoolQueryBuilder query = new BoolQueryBuilder();
query.must(boolQuery()
.must(boolQuery()
.should(termQuery("conditions.criteria.criterias.fieldName.keyword", "fullName"))
.should(termQuery("conditions.criteria.criterias.criterias.fieldName.keyword", "fullName"))
.should(termQuery("conditions.criteria.criterias.criterias.criterias.fieldName.keyword", "fullName"))
)
);
Elasticsearch 查询等效:
"bool" : {
"should" : [
{
"term" : {
"conditions.criteria.criterias.fieldName.keyword" : {
"value" : "fullName",
"boost" : 1.0
}
}
},
{
"term" : {
"conditions.criteria.criterias.criterias.fieldName.keyword" : {
"value" : "fullName",
"boost" : 1.0
}
}
},
{
"term" : {
"conditions.criteria.criterias.criterias.criterias.fieldName.keyword" : {
"value" : "fullName",
"boost" : 1.0
}
}
}
],
"adjust_pure_negative" : true,
"boost" : 1.0
}
问题:
fullName
无论条件条件的级别如何(多个嵌套),是否有更好/正确的方法来查询条件条件字段名称是否等于。我最初的解决方案就像上面的代码一样,但实际上仅限于 3 个级别。
我一直在搜索并找到嵌套查询,但我无法使其工作。也许我错误地使用了它,或者这不是解决方案。
编辑: 嵌套查询不起作用的原因是条件的映射类型不是嵌套的,并且映射中有 3 个级别的条件。有了这个 3 级标准字段名称检查就足够了......但也许有一种方法可以改进此代码。
解决方案
推荐阅读
- python - 将自定义卷积从 PyTorch 转换为 Tensorflow (2.2.0)
- pyspark - 在 PySpark 中,如何根据现有列的子字符串添加新列?
- ruby-on-rails - 具有“has_one”关联时的Rails“form_with”
- python - 使用 Lambda 的树叶总和(Python)
- python - standardize addresses for "nominatim"
- c# - Size and Location of Elements inside a form are different than they got defined, but why?
- python-3.x - 如何在没有 GPU 支持的情况下编译 torch 1.5.0?
- angularjs - 如何通过在 AngularJS 中绑定来捕获来自无效属性的 html 编译错误
- excel - Power Query get files from folders with files with different numbers of columns able to be refreshed
- flutter - Flutter 共享图像/文件(mimeType 问题)