Bonjour,
Voici le contexte dans lequel je travaille :
J'utilise ElasticSearch 1.5.0. et AngularJS (inutile ici pour ma question).
J'ai des instanceDescritpion, si lesquelles je veux faire des requêtes REST (ici seul le descriptionCode est utile).
Le mapping (abrégé pour une meilleur lisibilité) :
Exemple de données :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 { "properties": { "descriptionCode": { "type": "string", "index" : "analyzed" }, .... } }
Je fais déjà une requête sur les descriptionCode, en utilisant l'index analyzed du mapping, pour de l'auto complétion (qui fonctionne très bien ).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 { "_index" : "foo", "_type" : "instanceDescriptions", "_id" : "MedName-10", "_source" : { "descriptionCode" : "MedName-10", .... } }
Tout va bien jusque maintenant, mais c'est maintenant que mon problème arrive, après de mainte recherches, dans la doc d'Elasticsearch, ou sur Google.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 { "query" : { "filtered" : { "filter" : { "or" : [{ "terms" : { "descriptionCode" : ["medname","10"], "execution" : "and" } }, ... ] } } } }
Je voudrais maintenant faire une requête pour grouper sur les descriptionCode :
Et là, il me renvoie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 { "query" : { "match_all" : { } }, "aggs" : { "group_by_descriptionCode" : { "terms" : { "field" : "descriptionCode" } } } }
Je voudrais donc savoir s'il existe un moyen de faire une aggreagation sur le field descriptionCode, comme s'il était "not_analyzed" dans le mapping, mais sans changer le mapping, et si possible ne pas ajouter de champs dans le mapping.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 { "took" : 1, "timed_out" : false, "_shard" : { ... }, "hits" : {...}, "aggreagations" : { "group_by_descriptionCode" : { ..., "bucket" : [10] 0 : { "key" : "medname", "doc_count" : 10 }, 1 : { "key" : "10", "doc_count" : 1 }, 2 : { ... }, ... } } }
En gros, mes deux requêtes sont correctes, mais l'un d'elle ne me donne pas ce que j'attends, et si je change l'index analyzed en not_analyzed, la requête qui ne me donnait pas le bon resultat, fonctionne bien, mais l'autre ne me donne plus le bon resultat.
J'espère avoir été assez claire, sinon n'hésitez pas à me demander plus d'informations, ou à critiquer ce que j'ai fais.
Merci !!
Partager