コード例 #1
0
 public function searchArtistAction(Request $request)
 {
     $query = $request->get('query', null);
     // notre index est directement disponible sous forme de service
     $index = $this->container->get('fos_elastica.index.wte.artiste');
     $searchQuery = new \Elastica\Query\QueryString();
     $searchQuery->setParam('query', $query);
     // nous forçons l'opérateur de recherche à AND, car on veut les résultats qui
     // correspondent à tous les mots de la recherche, plutôt qu'à au moins un
     // d'entre eux (opérateur OR)
     $searchQuery->setDefaultOperator('AND');
     // on exécute une requête de type "fields", qui portera sur les colonnes "name"
     $searchQuery->setParam('fields', array('prenom'));
     // exécution de la requête, limitée aux 20 premiers résultats
     $results = $index->search($searchQuery, 20)->getResults();
     $data = array();
     // on arrange les données des résultats...
     foreach ($results as $result) {
         $source = $result->getSource();
         $data[] = array('id' => $source['id'], 'name' => $source['prenom']);
     }
     return new JsonResponse($data, 200, array('Cache-Control' => 'no-cache'));
 }
 /**
  * Builds a query based on QueryString syntax
  * @param array $fields the fields
  * @param string $queryString the query
  * @param integer $phraseSlop phrase slop
  * @param string $defaultOperator the default operator AND or OR
  * @return \Elastica\Query\QueryString
  */
 public function buildQueryString(array $fields, $queryString, $phraseSlop, $defaultOperator = 'AND')
 {
     $query = new \Elastica\Query\QueryString($queryString);
     $query->setFields($fields);
     $query->setAutoGeneratePhraseQueries(true);
     $query->setPhraseSlop($phraseSlop);
     $query->setDefaultOperator($defaultOperator);
     $query->setAllowLeadingWildcard($this->context->isAllowLeadingWildcards());
     $query->setFuzzyPrefixLength(2);
     $query->setRewrite('top_terms_boost_1024');
     $states = $this->context->getConfig()->get('CirrusSearchQueryStringMaxDeterminizedStates');
     if (isset($states)) {
         // Requires ES 1.4+
         $query->setParam('max_determinized_states', $states);
     }
     return $query;
 }