Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.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
java中存在elasticsearch筛选器_Java_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Java,elasticsearch" /> elasticsearch,Java,elasticsearch" />

java中存在elasticsearch筛选器

java中存在elasticsearch筛选器,java,elasticsearch,Java,elasticsearch,我有个问题。。。 如果字段有任何值,我想使用exists过滤器和我的java查询中的聚合来获得结果。这是一个嵌套数组,所以我想得到数组中有任何值的元素。 在我的java代码中,我有: ExistsFilterBuilder filter=FilterBuilders.existsFilter("guides"); QueryBuilder qb = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),filter); TermsBu

我有个问题。。。 如果字段有任何值,我想使用
exists
过滤器和我的java查询中的聚合来获得结果。这是一个嵌套数组,所以我想得到数组中有任何值的元素。 在我的java代码中,我有:

ExistsFilterBuilder filter=FilterBuilders.existsFilter("guides");
QueryBuilder qb = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),filter);
TermsBuilder tbBrand = AggregationBuilders.terms("brand-ag").field("brand.name.name.raw").order(Terms.Order.term(true)).size(0);

SearchResponse sr = esClient.prepareSearch("cellphones").setTypes("cellphone").setQuery(qb)
                .addAggregation(tbBrand ).execute().actionGet();
我的对象类将字段“guides”作为嵌套对象:

@Field(type = FieldType.Nested)
private List<EquipoVideoTutorialDTO> guides;
这将返回一个空数组,但我知道我至少有1项

此查询的结果如下:

{
  "filtered" : {
    "query" : {
      "match_all" : { }
    },
    "filter" : {
      "exists" : {
        "field" : "guides"
      }
    }
  }
}
发布代码,我想要的是: 从索引中获取所有“品牌”名称(聚合),其中元素在“指南”属性中具有某些值

我错过什么了吗

编辑

我使用指南添加了一个示例元素

{
        "idEquipo": 3675,
        "tipoTerminal": {
            "id": 1,
            "nombre": "TELEFONO"
        },
        "brand": {
            "id": 34,
            "nombre": "Apple"
        },
        "sistemaOperativo": {},
        "versionSO": null,
        "idUnico": "3521",
        "nombreComercial": null,
        "modelo": "iPhone 5s",
        "descripcion": "El iPhone siempre ha sido un dispositivo de vanguardia, y el iPhone 5s es exactamente eso. con una arquitectura móvil de 64 bits sin precedentes, un sensor identificador de huellas digitales innovador, y un flash doble LED, es un Smartphone que está adelantado a su tiempo. Todas estas funcionalidades están al servicio de las personas, y no al revés: son la prueba de que la innovación, cuidadosamente pensada, supera la tecnología desenfrenada. Esto se llama progreso. Y es algo hermoso.",
        "capacidadesDiferentes": [
            {
                "value": "Visual"
            },
            {
                "value": "Motriz"
            },
            {
                "value": "Auditiva - Habla"
            }
        ],
        "destacado": null,
        "precioMasBajo": null,
        "fechaCreacion": "2013-10-11",
        "fechaUltimaModificacion": "2014-08-13",
        "coberturaRoamingInternacional": [],
        "videos": [],
        "tutoriales": [],
        "guides": [
            {
                "titulo": "Internet",
                "subtitulo": null,
                "descripcion": "Esta guía te ayudará a configurar tu equipo para que puedas navegar en Internet.",
                "pdf": null,
                "prioridad": 1
            }
        ],
        "tecnologias": [
            {
                "idTecnologia": 600,
                "tecnologia": "3G",
                "frecuencias": [
                    {
                        "frecuencia": "900"
                    },
                    {
                        "frecuencia": "850"
                    },
                    {
                        "frecuencia": "1900"
                    },
                    {
                        "frecuencia": "2100"
                    }
                ]
            },
            {
                "idTecnologia": 100,
                "tecnologia": "GSM",
                "frecuencias": [
                    {
                        "frecuencia": "850"
                    },
                    {
                        "frecuencia": "900"
                    },
                    {
                        "frecuencia": "1800"
                    },
                    {
                        "frecuencia": "1900"
                    }
                ]
            },
            {
                "idTecnologia": 800,
                "tecnologia": "4GLTE",
                "frecuencias": [
                    {
                        "frecuencia": "700"
                    },
                    {
                        "frecuencia": "1700"
                    },
                    {
                        "frecuencia": "2100"
                    },
                    {
                        "frecuencia": "850"
                    }
                ]
            }
        ],
        "versiones": [],
        "categorias": [],
        "version": null,
        "estatus": "P",
        "buckets": {}
    }
我想出来了

由于列表是嵌套对象,因此需要对过滤器执行嵌套查询:

ExistsFilterBuilder filter=FilterBuilders.existsFilter("guides");
NestedFilterBuilder nested=FilterBuilders.nestedFilter("guides", filter);
QueryBuilder qb = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),nested);
TermsBuilder tbBrand = AggregationBuilders.terms("brand-ag").field("brand.name.name.raw").order(Terms.Order.term(true)).size(0);

SearchResponse sr = esClient.prepareSearch("cellphones").setTypes("cellphone").setQuery(qb)
            .addAggregation(tbBrand ).execute().actionGet();

你能展示一个应该在结果中返回的示例文档吗?我当然可以,我刚刚编辑了这篇文章。。。泰
ExistsFilterBuilder filter=FilterBuilders.existsFilter("guides");
NestedFilterBuilder nested=FilterBuilders.nestedFilter("guides", filter);
QueryBuilder qb = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),nested);
TermsBuilder tbBrand = AggregationBuilders.terms("brand-ag").field("brand.name.name.raw").order(Terms.Order.term(true)).size(0);

SearchResponse sr = esClient.prepareSearch("cellphones").setTypes("cellphone").setQuery(qb)
            .addAggregation(tbBrand ).execute().actionGet();