7 votes

Comment effectuer une recherche par éléments de tableau dans elasticsearch ?

J'ai un document indexé dans elasticsearch :

{
    "content":"Some content with @someone mention",
    "mentions":["someone"],
    "userId":"4dff31eaf8815f4df04e2d62"
}

J'essaie de le trouver par le biais d'une requête :

{
    "query": {
        "filtered": {
            "filter": { "term":{"userId":"4dff31eaf8815f4df04e2d62"} },
            "query": {
                term: {"mentions":"someone"}
            }
        }
    }
}

et n'obtiennent aucun résultat.

Dans le même temps, la recherche de contenu fonctionne correctement :

{
    "query": {
        "filtered": {
            "filter": { "term":{"userId":"4dff31eaf8815f4df04e2d62"} },
            "query": {
                "term": {"content":"some"}
            }
        }
    }
}

Une syntaxe particulière est-elle nécessaire pour la recherche dans les tableaux ? J'ai trouvé plusieurs sujets [ 1 , 2 ] sur les tableaux dans elasticsearch, mais il n'y a pas de réponse directe.

UPD L'appel à la cartographie renvoie le résultat suivant :

{
    "records": {
        "all":{
            "properties":{
                "content":{"type":"string"},
                "userId":{"type":"string"},
                "mentions":{"type":"string"}
            }
        }
    }
}

UPD2 J'ai trouvé la source du problème. J'ai accidentellement introduit une erreur dans ma question. Le nom d'utilisateur que j'avais en fait dans la base de données était sous la forme "quelqu'un" (le trait de soulignement est important). L'index standard l'a donc divisé en 2 mots et la requête pour "quelqu'un" a échoué.

2voto

mahemoff Points 4879

Il s'agit d'un usage correct, comme le mentionne votre mise à jour.

Si vous importez un document avec un tableau "mentions", la recherche sur un élément du tableau correspondant, en le désignant comme "mentions", permettra de retrouver le document. J'ai eu le même problème et je viens de le vérifier moi-même.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X