# Bien indexer et rechercher en français?

**URL:** https://discuss.elastic.co/t/bien-indexer-et-rechercher-en-francais/40233
**Category:** Discussions en français
**Created:** [January 27, 2016, 12:58pm UTC](https://discuss.elastic.co/t/bien-indexer-et-rechercher-en-francais/40233 "2016-01-27T12:58:55Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![novolog](https://avatars.discourse-cdn.com/v4/letter/n/7ba0ec/32.png) [@novolog](https://discuss.elastic.co/u/novolog)
#### Post date: [January 27, 2016, 12:58pm UTC](https://discuss.elastic.co/t/bien-indexer-et-rechercher-en-francais/40233/1 "2016-01-27T12:58:55Z")

</div>

Bonjour tout le monde,  
Je cherche à mettre en place un text search avec possibilité de filtrer par tags.  
Le filtrage par tag fonctionne parfaitement, par contre j'ai quelque soucis à obtenir la précision souhaité pour le text search.

Voici mon commandes Sense, incluant analyzer et mapping:

```auto
DELETE guide

PUT guide
{
"settings": {
    "analysis": {
      "analyzer": {
        "custom_index_analyzer": {
          "type" : "custom",
          "tokenizer" : "nGram",
          "filter": ["stopwords", "asciifolding" ,"lowercase", "snowball", "elision", "worddelimiter", "stemmer"]
        },
        "custom_search_analyzer": {
          "type" : "custom",
          "tokenizer" : "standard",
          "filter": ["stopwords", "asciifolding" ,"lowercase", "snowball", "elision", "worddelimiter", "stemmer"]
        }
      },
      "tokenizer": {
        "nGram": {
          "type": "nGram",
          "min_gram": 2,
          "max_gram": 20
        }
      }, 
      "filter": {
        "elision": {
          "type": "elision",
          "articles_case": true,
            "articles": [
              "l", "m", "t", "qu", "n", "s",
              "j", "d", "c", "jusqu", "quoiqu",
              "lorsqu", "puisqu"
            ]
        },
        "snowball": {
          "type": "snowball",
          "language": "French"
        },
        "stopwords": {
          "type": "stop",
          "stopwords": "_french_",
          "ignore_case": true
        },
        "worddelimiter": {
          "type": "word_delimiter"
        },
        "stemmer": {
          "type": "stemmer",
          "language": "light_french"
        }
      }
    }
  }
}

PUT guide/commerce/_mapping
{
  "properties": {
    "address": {
      "properties": {
        "line": {
          "type": "string",
          "analyzer": "custom_index_analyzer",
          "search_analyzer": "custom_search_analyzer"
        },
        "city": {
          "type": "string",
          "analyzer": "custom_index_analyzer",
          "search_analyzer": "custom_search_analyzer"
        },
        "postal_code": {
          "type": "string"
        }
      }
    },
    "description": {
      "type": "string",
        "analyzer": "custom_index_analyzer",
        "search_analyzer": "custom_search_analyzer"
    },
    "name": {
      "type": "string",
      "analyzer": "custom_index_analyzer",
      "search_analyzer": "custom_search_analyzer"
    }
    "tags": {
      "type": "string",
      "index": "not_analyzed"
    }
  }
}

# Indexation de documents
PUT guide/commerce/1
{
	"name": "Mon commerce",
	"address": {
		"line": "123 rue Machin",
		"city": "Avignon",
		"postal_code": "84000"
	},
	"description": "Un permier commerce avec des articles.",
	"tags": ["restaurant", "boucherie"]
}

PUT guide/commerce/2
{
	"name": "À la bonne fourchette",
	"address": {
		"line": "450 rue Machin",
		"city": "Avignon",
		"postal_code": "84000"
	},
	"description": "Venez manger du bon poulet.",
	"tags": ["restaurant", "café"]
}

```

Et voici la recherche que j'effectue:

```auto
GET /guide/commerce/_search
{
  "query" : {
    "filtered" : {
      "query": {
        "match": {
          "_all": "article"  
        }
      },
      "filter" : {
        "bool": {
          "must": [
            {"term": {"tags": "restaurant"}},
            {"term": {"tags": "boucherie"}}
          ]
        }
      }
    }
  }
}

```

Vous pouvez voir que je cherche pour `article` en espérant que ça match `articles` au pluriel dans la description de mon commerce avec l'id1.  
Malheureusement, je n'ai aucun résultats. Même chose si je table "fourchete" à la place de "fourchette".

D'après ma compréhension, les filtres snowball et stemmer auraient m'aider à supporter ce genre de recherche.

Qu'ai-je mal compris et fait ?  
Merci.

---

<div class="post-metadata">

### Author: ![tanguy](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/tanguy/32/6030_2.png) [@tanguy](https://discuss.elastic.co/u/tanguy)
#### Post date: [January 27, 2016, 1:06pm UTC](https://discuss.elastic.co/t/bien-indexer-et-rechercher-en-francais/40233/2 "2016-01-27T13:06:30Z")

</div>

Bonjour,

Le champ `_all` est un cas un peu à part ( [https://www.elastic.co/guide/en/elasticsearch/reference/2.1/mapping-all-field.html#mapping-all-field](https://www.elastic.co/guide/en/elasticsearch/reference/2.1/mapping-all-field.html#mapping-all-field) ), il correspond en gros à une concaténation de toutes les valeurs des champs. La plupart du temps il faut le configurer pour avoir exactement le résultat que l'on souhaite.

Dans ton cas, comme tu n'as pas changé l'analyzer du champ `_all` par ton analyzer custom c'est celui par défaut qui s'applique (et qui ne gère pas le cas que tu souhaites). Tu peux donc configurer l'analyzer de `_all` et le changer pour le tien.

Toutefois, je conseille généralement de désactiver `_all` et d'utiliser une requête de type `multi_match` qui te permettra de rechercher dans plusieurs champs bien précis à la fois.

Tanguy

Le mieux [https://www.elastic.co/guide/en/elasticsearch/reference/2.1/mapping-all-field.html#mapping-all-fieldtu](https://www.elastic.co/guide/en/elasticsearch/reference/2.1/mapping-all-field.html#mapping-all-fieldtu)

---

<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: [January 27, 2016, 1:15pm UTC](https://discuss.elastic.co/t/bien-indexer-et-rechercher-en-francais/40233/3 "2016-01-27T13:15:57Z")

</div>

J'ajoute à la réponse de Tanguy que j'aime bien personnellement utiliser la fonction `copy_to`. Elle permet de copier tes textes à chercher en mode "fulltext" vers un champ particulier et du coup de lui associer le ou les analyseurs souhaités.

---

<div class="post-metadata">

### Author: ![novolog](https://avatars.discourse-cdn.com/v4/letter/n/7ba0ec/32.png) [@novolog](https://discuss.elastic.co/u/novolog)
#### Post date: [January 29, 2016, 1:20am UTC](https://discuss.elastic.co/t/bien-indexer-et-rechercher-en-francais/40233/4 "2016-01-29T01:20:30Z")

</div>

Génial! Tout fonctionne 🙂  
Merci beaucoup pour vous réponses.  
Maurice.

---

<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 6, 2017, 1:49pm UTC](https://discuss.elastic.co/t/bien-indexer-et-rechercher-en-francais/40233/5 "2017-07-06T13:49:46Z")

</div>


