Comment rechercher des objets imbriqués avec élastique à la recherche d'
OK, je n'ai pas été en mesure de comprendre cela jusqu'à présent. En espérant que quelqu'un peut offrir un aperçu.
Donné les documents ci-dessous, comment pourrais-je rechercher tous les documents avec une vidéo "test" dans le titre de la vidéo? Je suis l'aide de l'API HTTP. (En gros, comment voulez-vous rechercher des objets imbriqués avec élastique à la recherche? Je sais qu'il y a à être docs là-bas, mais je n'ai pas vraiment été capable d'en trouver.)
[{
id:4635,
description:"This is a test description",
author:"John",
author_id:51421,
video: {
title:"This is a test title for a video",
description:"This is my video description",
url:"/url_of_video"
}
},
{
id:4636,
description:"This is a test description 2",
author:"John",
author_id:51421,
video: {
title:"This is an example title for a video",
description:"This is my video description2",
url:"/url_of_video2"
}
},
{
id:4637,
description:"This is a test description3",
author:"John",
author_id:51421,
video: {
title:"This is a test title for a video3",
description:"This is my video description3",
url:"/url_of_video3"
}
}]
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas nécessairement besoin de nid de vidéo; vous pouvez mapper comme un champ normal. Ce qui signifie qu'il va stocker
Et vous pouvez rechercher
video.title:'test'
.Autant que je le reçois, des champs imbriqués utile lorsque vous avez plusieurs éléments imbriqués, et vous voulez faire une requête uniquement pour les éléments imbriqués. Par exemple, ces données
Si vous recherchez
video.title: 'test' and video.description: 'description2'
, et la vidéo n'a pas été imbriquée, il va vous donner un faux résultat (parce quetest
est dans la première vidéo etdescription2
dans le second, mais dans tout le domaine de la vidéo que vous avez à la fois).Dans ce cas, si vous avez une carte vidéo imbriquée, il va se souvenir de chaque vidéo comme une entité distincte et la recherche de vidéos individuelles qui correspondent à ces conditions, donc, pour
video.title: 'test' and video.description: 'description2'
il sera de retour rien, pourvideo.title: 'example' and video.description: 'description2'
il retournera un résultat.OK, RTFM! Finalement, j'ai trouvé ces pages (aurait du prendre plus de temps avec les docs à l'avance) et il semble que nous de définir la propriété que détient la vidéo de type:imbriqués, puis utiliser des requêtes imbriquées.
http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-nested-query.html
http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-nested-filter.html
Espère que cela aide quelqu'un en bas de la route.
Si vous voulez le mettre dans l'API Rest format d'URL
Vous pouvez utiliser le
.keyword
suffixe si le nom de l'objet imbriqué est unique:Qui doit correspondre à votre premier exemple d'entrée. Notez que le
video
nom de l'objet n'est spécifié nulle part; cela correspond sur tous les objets qui ont unetitle
de sous-objet.