# Select où 2 champs doivent avoir la même valeur

**URL:** <https://discuss.elastic.co/t/select-ou-2-champs-doivent-avoir-la-meme-valeur/136266>\
**Category:** Discussions en français\
**Created:** [June 18, 2018, 9:07am UTC](https://discuss.elastic.co/t/select-ou-2-champs-doivent-avoir-la-meme-valeur/136266 "2018-06-18T09:07:50Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![Athimue](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/athimue/32/32359_2.png) [@Athimue](https://discuss.elastic.co/u/Athimue)\
**Post date:** [June 18, 2018, 9:07am UTC](https://discuss.elastic.co/t/select-ou-2-champs-doivent-avoir-la-meme-valeur/136266/1 "2018-06-18T09:07:50Z")

</div>

Bonjour à tous,

Comme mon titre l'explique, je souhaite ferme une requête Select qui me récupère les documents où 2 colonnes ont la même valeur.  
En effet, j'ai essayé via :

```
GET index/doc/_search
{ 
    "query": {
      "match": {
        "colonne1": "colonne2"
      }
    }
} 

```

mais cela va me recupére les documents où colonne1 a pour valeur colonne2. Et moi je souhaite récupérer les documents où la valeur de colonne1 et colonne2 est identique.  
Je suis nouveau, je n'ai pas trouvé de réponse à mon problème, veuillez m'excuser si ma question est facile.

Cordialement,

Athimue

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [June 18, 2018, 9:31am UTC](https://discuss.elastic.co/t/select-ou-2-champs-doivent-avoir-la-meme-valeur/136266/2 "2018-06-18T09:31:37Z")

</div>

Tu ne peux pas faire ça simplement dans elasticsearch ou en tout cas de façon efficace (rapidité).

Une précision : tu veux vérifier à l'intérieur du même document si les 2 champs sont égaux, c'est ça ?

---

<div class="post-metadata">

**Author:** ![Athimue](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/athimue/32/32359_2.png) [@Athimue](https://discuss.elastic.co/u/Athimue)\
**Post date:** [June 18, 2018, 9:35am UTC](https://discuss.elastic.co/t/select-ou-2-champs-doivent-avoir-la-meme-valeur/136266/3 "2018-06-18T09:35:52Z")

</div>

Merci

Je voudrais récupérer tous les documents qui ont leurs 2 champs identiques.

Il n'existe aucune solution simple ?

En SQL, cela s'écrit simplement :

> WHERE colonne1=colonne2

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [June 18, 2018, 10:51am UTC](https://discuss.elastic.co/t/select-ou-2-champs-doivent-avoir-la-meme-valeur/136266/4 "2018-06-18T10:51:54Z")

</div>

> Il n'existe aucune solution simple ?

Non. Tu peux utiliser des scripts (voir [How to use scripts | Elasticsearch Guide [6.3] | Elastic](https://www.elastic.co/guide/en/elasticsearch/reference/6.3/modules-scripting-using.html)) mais ça sera sans doute super lent car ( [Accessing document fields and special variables | Elasticsearch Guide [6.3] | Elastic](https://www.elastic.co/guide/en/elasticsearch/reference/6.3/modules-scripting-fields.html#_search_and_aggregation_scripts) ):

> With the exception of script fields which are executed **once per search hit** , scripts used in search and aggregations will be executed once for every document which might match a query or an aggregation. Depending on how many documents you have, this could mean millions or billions of executions: these scripts need to be fast!

L'idéal est de calculer ça au moment de l'indexation. Avec un script ou pas. En tout cas ça sera plus rapide ensuite à la recherche.

---

<div class="post-metadata">

**Author:** ![Athimue](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/athimue/32/32359_2.png) [@Athimue](https://discuss.elastic.co/u/Athimue)\
**Post date:** [June 18, 2018, 11:43am UTC](https://discuss.elastic.co/t/select-ou-2-champs-doivent-avoir-la-meme-valeur/136266/5 "2018-06-18T11:43:14Z")

</div>

D'accord, merci pour ta réponse, je vais quand même regarder au niveau des scripts.

Aurais-tu par hasard une idée de comment le réaliser ? sans doute avec doc['colonne1'] mais je ne comprends comment je pourrais faire comprendre au script que doc['colonne1']=doc['colonne2']

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [June 18, 2018, 11:56am UTC](https://discuss.elastic.co/t/select-ou-2-champs-doivent-avoir-la-meme-valeur/136266/6 "2018-06-18T11:56:31Z")

</div>

En fait, je pense que ce n'est pas vraiment possible.  
Car les scripted fields sont calculés après exécution de la requête et non avant.

Donc tu ne peux pas créer un champ booléen genre `isEqual` sur lequel tu pourrais ensuite faire un filtre.

Je ne vois pas de solution. Encore une fois, le mieux est de calculer ça au moment de l'indexation.

---

<div class="post-metadata">

**Author:** ![Athimue](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/athimue/32/32359_2.png) [@Athimue](https://discuss.elastic.co/u/Athimue)\
**Post date:** [June 18, 2018, 2:58pm UTC](https://discuss.elastic.co/t/select-ou-2-champs-doivent-avoir-la-meme-valeur/136266/7 "2018-06-18T14:58:43Z")

</div>

Ok, merci pour tes réponses, je vais fouiller de mon coté

---

<div class="post-metadata">

**Author:** ![gabriel\_tessier](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/gabriel_tessier/32/27911_2.png) [@gabriel\_tessier](https://discuss.elastic.co/u/gabriel_tessier)\
**Post date:** [June 19, 2018, 3:38am UTC](https://discuss.elastic.co/t/select-ou-2-champs-doivent-avoir-la-meme-valeur/136266/8 "2018-06-19T03:38:53Z")

</div>

Bonjour,

Juste une autre facon de faire mais vraiment spécifique, si t'as pas besoin de requeter en temps réel et t'utilises des données dont tu connais déjà le mapping que t'as définie dans un template.  
Tu peux utiliser "\_reindex" pour mettre à jour les documents avec ta condition, un exemple en dessous:

deux documents dont un à le champ name == name\_common

> POST user\_data/doc/  
> {  
> "name": "Party",  
> "name\_common": "Party"  
> }
> 
> POST user\_data/doc/  
> {  
> "name": "Party",  
> "name\_common": "Patrol"  
> }

> POST \_reindex  
> {  
> "source": {  
> "index": "user\_data"  
> },  
> "dest": {  
> "index": "user\_data\_equal",  
> "version\_type": "external"  
> },  
> "script": {  
> "source": "if (ctx.\_source.name == ctx.\_source.name\_common) {ctx.\_source.is\_equal = 1}",  
> "lang": "painless"  
> }  
> }

Si tu regardes dans l'index user\_data\_equal t'auras tes documents recopié avec dans le premier document la colonne is\_equal. Y'a meme moyen de faire plus compliqué suivant tes besoins en utilisant ingest.... 😀

Le mieux et le plus simple c'est comme dit David, c'est de le faire à l'indexation mais si t'as déjà tes données et tu peux pas les modifier avant d'indexer.  
Ca fait plein de si, mais dans un cas precis ca peux aider.

---

<div class="post-metadata">

**Author:** ![Athimue](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/athimue/32/32359_2.png) [@Athimue](https://discuss.elastic.co/u/Athimue)\
**Post date:** [June 19, 2018, 12:04pm UTC](https://discuss.elastic.co/t/select-ou-2-champs-doivent-avoir-la-meme-valeur/136266/9 "2018-06-19T12:04:46Z")

</div>

Je te remercie pour ta réponse. En effet, cela répond à mes besoins, je vais continuer de fouiller de mon coté en utilisant ta méthode 😁

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [July 17, 2018, 12:04pm UTC](https://discuss.elastic.co/t/select-ou-2-champs-doivent-avoir-la-meme-valeur/136266/10 "2018-07-17T12:04:48Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
