Analyzer - edgeNGram - Autocomplete - Recherche

73 views
Skip to first unread message

Franck GIRODON

unread,
May 21, 2013, 11:38:34 AM5/21/13
to elastics...@googlegroups.com
Bonjour,

J'ai créé un index comme suit :

$elasticaIndex->create(
    array(
        'number_of_shards' => 4,
        'number_of_replicas' => 0,
        'analysis' => array(
            'analyzer' => array(
                'autocomplete' => array(
                    'tokenizer' => 'whitespace',
                    'filter' => array('asciifolding', 'lowercase', 'autocomplete')
                )
            ),
            'filter' => array(
                'autocomplete' => array(
                    'type' => 'edgeNGram',
                    'min_gram' => '3',
    'max_gram' => '15',
    'side' => 'front',
                )
            )
        )
    ),
    true
);

Mon mapping est le suivant :
$mapping->setProperties(array(
    'id' => array('type' => 'integer', 'include_in_all' => FALSE),
    "mot_FR" => array('type' => 'string', 'include_in_all' => TRUE, "analyzer" => "autocomplete"),
));

Pour faire de l'autocomplétion, cela fonctionne plutôt pas mal.

Par contre, j'effectue aussi de la recherche sur mon champ "mot_FR", et là les résultats ne sont pas toujours pertinent.
Par exemple, j'ai des documents indexés par les mots "1 personne", "2 personnes", "groupe de personnes"
Si j'effectue une recherche avec le terme "2 personnes", ce ne sont pas mes documents indexés par "2 personnes" qui arrivent en premier mais ceux indexés par ""groupe de personnes" ... du coup ce n'est pas pertinent ...

Une idée ?

Merci,

Nicolas Labrot

unread,
May 21, 2013, 2:17:05 PM5/21/13
to elastics...@googlegroups.com
Cela s'applique bien a ce que tu veux faire


2013/5/21 Franck GIRODON <franck....@gmail.com>
--
--
---
Vous pouvez également poster et consulter les réponses en anglais sur le groupe Elasticsearch https://groups.google.com/group/elasticsearch
 
Si vous avez également posté votre question sur la mailing list elasti...@googlegroups.com, merci d'indiquer ici le lien vers cette discussion pour faciliter le suivi.
 
Twitter : @ElasticsearchFR https://twitter.com/#!/ElasticsearchFR
Site web (English) : http://www.elasticsearch.org/
 
---
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes Elasticsearch FR.
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse elasticsearch-...@googlegroups.com.
Pour plus d'options, visitez le site https://groups.google.com/groups/opt_out .
 
 

Franck GIRODON

unread,
May 21, 2013, 2:35:39 PM5/21/13
to elastics...@googlegroups.com
ça m'a l'air intéressant.

Je vais essayer et je te tiens au courant.

Merci encore.

Franck

Franck GIRODON

unread,
May 22, 2013, 9:14:46 AM5/22/13
to elastics...@googlegroups.com
POur info, çela fonctionne bien :

$elasticaIndex->create(
    array(
        'number_of_shards' => 5,
        'number_of_replicas' => 0,
        'analysis' => array(
            'analyzer' => array(
                'autocomplete' => array(
                    'tokenizer' => 'whitespace',
                    'filter' => array('asciifolding', 'lowercase', 'autocomplete')
                )
            ),
            'filter' => array(
                'autocomplete' => array(
                    'type' => 'edgeNGram',
                    'min_gram' => '3',
    'max_gram' => '15',
    'side' => 'front',
                )
            )
        )
    ),
    true
);


$mapping->setProperties(array(
    'id' => array('type' => 'integer', 'include_in_all' => FALSE),
    "mot_FR" => array('type' => 'multi_field', 'fields' => array(
'name' => array('type' => 'string', 'analyzer' => 'autocomplete'),
'untouched' => array('type' => 'string')
    )
)
));


J'utilise l'analyzer 'autocomplete' pour mon autocompletion et le type 'untouched' pour ma recherche.

Merci de l'astuce pour le 'multi-fied' !

Franck

Nicolas Labrot

unread,
May 22, 2013, 9:24:00 AM5/22/13
to elastics...@googlegroups.com
You're welcome! ;)

ghis...@fulltook.com

unread,
May 28, 2013, 10:41:58 AM5/28/13
to elastics...@googlegroups.com
Bonjour,

Est-ce que le muti field type peut répondre à cette problématique :

"name" : {
     "default": "Paris",
     "en" : "Paris",
     "es": "Paris" 
}

Ce champs name contient toutes les langues disponibles et le nom par défaut.
Quand je fait une recherche j'aimerai faire un "cherche dans name.fr si il n'existe pas cherche dans name.default" sachant qu'il existe environ 90 langues.

Ca fait un bail que je n'arrive pas à résoudre cette problématique avec elasticsearch, c'est dans le cadre d'un projet libre :

Pour l'instant le projet ne supporte pas les traductions, je travaille dessus. Si un elastic-lover veut se joindre au projet il est welcome :)

Merci
Ghislain
Reply all
Reply to author
Forward
0 new messages