Recherche sur plusieurs mots

81 views
Skip to first unread message

Jean Szabo

unread,
May 22, 2013, 3:52:28 AM5/22/13
to elastics...@googlegroups.com
Bonjour,

je veux faire une recherche sur "le pont", mais sans obtenir les résultats contenant le mot pont tout seul, comme "construction du pont".

Si je fais cette query, cela fonctionne, mais je ne trouve pas comment créer cette requête avec Elastica.

{"query":{"match_phrase":{"text":"le pont"}}}

Et si je fais un Query_String avec un And, j'obtiens les résultats contenant "le" et "pont", mais pas forcément côte à côte.

Merci

Jean

Mourad Kashi

unread,
May 22, 2013, 4:08:21 AM5/22/13
to elastics...@googlegroups.com
Bonjourno !

As tu essayé avec de mettre tout dans une query String ? du genre 

$elasticaQueryString = new Elastica\Query\QueryString();
$elasticaQueryString->setQuery("nom_de_ton_champ:'" . $strgARechercher. "'");
ou si c'est sur tout les champs 
$elasticaQueryString->setQuery($strgARechercher);

Si tu trouves pas de résultat ceci peut venir de ton mapping/analyzer...

Jean Szabo

unread,
May 22, 2013, 4:27:06 AM5/22/13
to elastics...@googlegroups.com
Merci, 

mais cela ne fonctionne pas mieux.

Comment je fais pour faire ce genre de query : {"query":{"match_phrase":{"text":"le pont"}}} je ne trouve pas le match phrase.

Sinon, voici ma configuration : 

 
ES='http://localhost:9200'
ESIDX='fao'
ESTYPE='article'
 
curl -XDELETE $ES/$ESIDX
 
curl -XPUT $ES/$ESIDX/ -d '{
"settings" : {
"index":{
"analysis":{
"analyzer":{
"francais":{
"type":"custom",
"tokenizer":"standard",
"filter":["lowercase", "fr_stemmer", "stop_francais", "asciifolding", "elision"]
}
},
"filter":{
"stop_francais":{
"type":"stop",
"stopwords":["_french_"]
},
"fr_stemmer" : {
"type" : "stemmer",
"name" : "french"
},
"elision" : {
"type" : "elision",
"articles" : ["l", "m", "t", "qu", "n", "s", "j", "d"]
}
}
}
}
}
}'
 
curl -XPUT $ES/$ESIDX/$ESTYPE/_mapping -d '{
"article" : {
"_all" : { "analyzer":"francais" },
"properties" : {
"title" : {"type" : "string", "analyzer":"francais"},
"message" : {"type" : "string", "analyzer":"francais"}
}
}
}'

Mourad Kashi

unread,
May 22, 2013, 6:01:01 AM5/22/13
to elastics...@googlegroups.com
Pour le match phrase je te file un exemple  : 
(oublie pas l'opérateur OR ) ;)
Dis moi si c est bon ! 


$client = $this->_getClient();
        $index = $client->getIndex('test');
        $index->create(array(), true);
        $type = $index->getType('test');

        $doc = new Document(1, array('name' => 'Basel-Stadt'));
        $type->addDocument($doc);
        $doc = new Document(2, array('name' => 'New York'));
        $type->addDocument($doc);
        $doc = new Document(3, array('name' => 'New Hampshire'));
        $type->addDocument($doc);
        $doc = new Document(4, array('name' => 'Basel Land'));
        $type->addDocument($doc);

        $index->refresh();

        $field = 'name';
        $type = 'phrase';
 $operator = 'or';
  
        
        $query = new Match(); // CECI correspond à \Elastica\Query\Match
        $query->setFieldQuery($field, 'New York');
        $query->setFieldType($field, $type);
$query->setFieldOperator($field, $operator);
        $resultSet = $index->search($query);

        $this->assertEquals(1, $resultSet->count());

Reply all
Reply to author
Forward
0 new messages