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 № 1Vous 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"]
}
}
}