/ / Recherche de tableaux dans elasticsearch - java, elasticsearch

Recherche de tableaux dans Elasticsearch - Java, Elasticsearch

J'ai 3 documents,

{
"category":[{"id":"1"},{"id":"2"},{"id":"3"}]
}

{
"category":[{"id":"1"},{"id":"4"}]
}
{
"category":[]
}

Comment puis-je trouver un document qui a category.id dans (2,3) comme mysql, également quel type de requête DSL je dois utiliser dans java api querybuilder

Réponses:

1 pour la réponse № 1

Vous pouvez utiliser la requête bool avec la clause should pour rechercher tous les documents contenant l'un des identifiants demandés. Voici comment la requête DSL aimerait

{
"query": {
"bool": {
"should": [
{"term": {
"category.id": {
"value": "2"
}
}},
{"term": {
"category.id": {
"value": "3"
}
}
}
]
}
}
}

Voici comment vous utiliseriez l'API Java

QueryBuilders.boolQuery().should(QueryBuilders.matchQuery("category.id", "2"))
.should(QueryBuilders.matchQuery("category.id", "1"));

Si le champ id n'est pas analysé, vous pouvez également utiliser la requête de termes. Plus d'infos ici https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-terms-query.html


0 pour la réponse № 2

Voici à quoi devrait ressembler votre requête:

{
"query": {
"bool": {
"filter": [
{
"term": {
"category.id": "1"
}
},
{
"term": {
"category.id": "2"
}
}
]
}
}
}

0 pour la réponse № 3

Comme ça:

{
"filter": {
"terms": {
"category.id": ["2", "3"]
}
}
}