/** * * @Route("", name="centrale_lille_searchuser") * @Method("GET") */ public function searchAction(Request $request) { $search = new SearchString(); $searchForm = $this->get('form.factory')->createNamed('', 'string_search_type', $search, array('action' => $this->generateUrl('centrale_lille_searchuser'), 'method' => 'GET')); $searchForm->handleRequest($request); $search = $searchForm->getData(); if (is_null($search->getStringSearch())) { $result_machine = []; $result_user = []; } else { //Recherche User $typeUser = $this->get('fos_elastica.index.fablab.User'); $query_part_user = new \Elastica\Query\BoolQuery(); $fieldQuery = new \Elastica\Query\Match(); $fieldQuery2 = new \Elastica\Query\Match(); $fieldQuery->setFieldQuery('email', $search->getStringSearch()); $fieldQuery->setFieldQuery('email', $search->getStringSearch()); $fieldQuery->setFieldFuzziness('email', 0.7); $query_part_user->addShould($fieldQuery); $fieldQuery2->setFieldQuery('username', $search->getStringSearch()); $fieldQuery2->setFieldQuery('username', $search->getStringSearch()); $fieldQuery2->setFieldFuzziness('username', 0.7); $query_part_user->addShould($fieldQuery2); $filters = new \Elastica\Filter\Bool(); $query_user = new \Elastica\Query\Filtered($query_part_user, $filters); $result_user = $typeUser->search($query_user); //Recherche Machine $typeMachine = $this->get('fos_elastica.index.fablab.Machine'); $query_part_machine = new \Elastica\Query\Bool(); $fieldQuery3 = new \Elastica\Query\Match(); $fieldQuery4 = new \Elastica\Query\Match(); $fieldQuery3->setFieldQuery('machine_name', $search->getStringSearch()); $fieldQuery3->setFieldFuzziness('machine_name', 0.7); $fieldQuery3->setFieldMinimumShouldMatch('machine_name', '80%'); $query_part_machine->addShould($fieldQuery3); $fieldQuery4->setFieldQuery('description', $search->getStringSearch()); $fieldQuery4->setFieldFuzziness('description', 2); $fieldQuery4->setFieldMinimumShouldMatch('description', '100%'); $query_part_machine->addShould($fieldQuery4); $filters = new \Elastica\Filter\Bool(); $query_machine = new \Elastica\Query\Filtered($query_part_machine, $filters); $result_machine = $typeMachine->search($query_machine); //Recherche Machine $typeMachine = $this->get('fos_elastica.index.fablab.Machine'); $query_part_machine = new \Elastica\Query\Bool(); $fieldQuery3 = new \Elastica\Query\Match(); $fieldQuery4 = new \Elastica\Query\Match(); $fieldQuery3->setFieldQuery('machine_name', $search->getStringSearch()); // $fieldQuery3->setFieldFuzziness('machine.machine_name', 0.7); //$fieldQuery3->setFieldMinimumShouldMatch('machine_name', '80%'); $query_part_machine->addShould($fieldQuery3); $fieldQuery4->setFieldQuery('description', $search->getStringSearch()); // $fieldQuery4->setFieldFuzziness('machine.machine_name', 0.7); //$fieldQuery4->setFieldMinimumShouldMatch('machine_name', '100%'); $query_part_machine->addShould($fieldQuery4); } return $this->render('CentraleLilleSearchBundle:Default:search.html.twig', array('result_user' => $result_user, 'result_machine' => $result_machine, 'form' => $searchForm->createView(), 'search' => $search->getStringSearch())); }
/** * Lists all Demo entities. * * @Route("/", name="demo_index") * @Method("GET") */ public function indexAction() { $type = $this->get('fos_elastica.index.fablab.User'); $query_part = new \Elastica\Query\Bool(); $query_part->addShould(new \Elastica\Query\Term(array('email' => array('value' => 'cyprien')))); $query_part->addShould(new \Elastica\Query\Term(array('username' => array('value' => 'cyprien')))); $filters = new \Elastica\Filter\Bool(); $query = new \Elastica\Query\Filtered($query_part, $filters); $result = $type->search($query); return $this->render('demo/index.html.twig', array('demos' => $result)); }
/** * @Route("/search/",name="search") * @Template() */ public function searchAction(Request $request) { $finder = $this->container->get('fos_elastica.finder.pages.page'); $boolQuery = new \Elastica\Query\Bool(); $boolQuery->addShould(new \Elastica\Query\Fuzzy('title', $request->get('q'))); $boolQuery->addShould(new \Elastica\Query\Fuzzy('content', $request->get('q'))); // $fuzzy->addField('content', array('value'=>$request->get('q'))); $pages = $finder->find($boolQuery); /** var array of Acme\UserBundle\Entity\User limited to 10 results */ // $users = $finder->find('bob', 10); return array('pages' => $pages); }
/** * @param $searchText * @return array<Article> */ public function findSousTitres($searchText) { $query_part = new \Elastica\Query\Bool(); $query_part->addShould(new \Elastica\Query\Term(array('value' => array('value' => $searchText, 'boost' => 3)))); $query_part->addShould(new \Elastica\Query\Term(array('intitule' => array('value' => $searchText)))); $filters = new \Elastica\Filter\Bool(); $filters->addMust(new \Elastica\Filter\Term(array('langue' => 'fr'))); $query = new \Elastica\Query\Filtered($query_part, $filters); // return $this->findHybrid($query); pour avoir aussi un ES Result $res = $this->find($query); return $res; }
public function search($q = '') { if ($q == '') { $baseQuery = new \Elastica\Query\MatchAll(); } else { $baseQuery = new \Elastica\Query\Bool(); $baseQuery->addShould(new \Elastica\Query\Term(array('id' => intval($q)))); $baseQuery->addShould(new \Elastica\Query\Term(array('amount' => floatval($q)))); $baseQuery->addShould(new \Elastica\Query\MatchPhrasePrefix('description', $q)); } $query = \Elastica\Query::create($baseQuery); $count = $this->finder->createPaginatorAdapter($query, array('search_type' => 'count'))->getTotalHits(); $query->addSort(array('id' => array('order' => 'asc'))); $query->setSize($count); return $this->find($query); }
public function AetCommunicationSearch($searchText) { //$finder = $this->container->get('fos_elastica.finder.aetsite.aetusers'); $baseQuery = new \Elastica\Query(); $boolQuery = new \Elastica\Query\Bool(); /* if ((strlen($searchText)==4) && ctype_digit($searchText)) { // Your Convert logic $boolFilter = new \Elastica\Filter\Bool(); $from = new \DateTime('01/01/'.$searchText); $to = new \DateTime('12/31/'.$searchText); $boolFilter->addMust(new \Elastica\Filter\Range('promotion', array( 'gte' => \Elastica\Util::convertDate($from->getTimestamp()), 'lte' => \Elastica\Util::convertDate($to->getTimestamp()) ) )); $baseQuery->setPostFilter($boolFilter); } else{*/ $fieldQuery = new \Elastica\Query\Match(); $fieldQuery->setFieldQuery('title', $searchText); //$fieldQuery->setFieldParam('title', 'analyzer', 'custom_search_analyzer'); $boolQuery->addShould($fieldQuery); $field1Query = new \Elastica\Query\Match(); $field1Query->setFieldQuery('shortDesc', $searchText); $boolQuery->addShould($field1Query); $field1Query = new \Elastica\Query\Match(); $field1Query->setFieldQuery('body', $searchText); $boolQuery->addShould($field1Query); $baseQuery->setQuery($boolQuery); //} // Option 1. Returns all users who have example.net in any of their mapped fields return $this->find($baseQuery); }
/** * * @Route("", name="centrale_lille_search") */ public function searchAction() { $jsonContentUser = ''; $jsonContentMachine = ''; $jsonContentProjet = ''; $jsonContentSkills = ''; $jsonTotal = ''; $datauser = []; $dataprojet = []; $dataskills = []; $datamachine = []; $search = $this->get('request')->query->get('searchForm'); if (is_null($search)) { $result_machine = []; $result_user = []; $result_skills = []; $result_projet = []; } else { //User Json $queryall = new \Elastica\Query\MatchAll(); $typeUser = $this->get('fos_elastica.index.fablab.User'); $result_alluser = $typeUser->search($queryall)->getResults(); foreach ($result_alluser as $result) { $source = $result->getSource(); $datauser[] = array('name' => $source['username'], 'link' => 'userId'); } $jsonContentUser = new JsonResponse($datauser, 200, array('Cache-Control' => 'no-cache')); //Project Json $queryall = new \Elastica\Query\MatchAll(); $typeProjet = $this->get('fos_elastica.index.fablab.Projet'); $result_allprojet = $typeProjet->search($queryall)->getResults(); foreach ($result_allprojet as $result) { $source = $result->getSource(); $dataprojet[] = array('name' => $source['name'], 'link' => 'projectId'); } $jsonContentProjet = new JsonResponse($dataprojet, 200, array('Cache-Control' => 'no-cache')); //Skills Json $queryall = new \Elastica\Query\MatchAll(); $typeSkills = $this->get('fos_elastica.index.fablab.Competence'); $result_allskills = $typeSkills->search($queryall)->getResults(); foreach ($result_allskills as $result) { $source = $result->getSource(); $dataskills[] = array('name' => $source['name'], 'link' => 'skillsId'); } $jsonContentSkills = new JsonResponse($dataskills, 200, array('Cache-Control' => 'no-cache')); //Machine Json $queryall = new \Elastica\Query\MatchAll(); $typeMachine = $this->get('fos_elastica.index.fablab.Machine'); $result_allmachine = $typeMachine->search($queryall)->getResults(); foreach ($result_allmachine as $result) { $source = $result->getSource(); $type = $result->getType(); $datamachine[] = array('name' => $source['name'], 'link' => 'machineId'); } $jsonContentMachine = new JsonResponse($datamachine, 200, array('Cache-Control' => 'no-cache')); $jsonContentMachine = '"machine": ' . substr($jsonContentMachine, 83); $jsonContentUser = '******' . substr($jsonContentUser, 83); $jsonContentSkills = '"competence": ' . substr($jsonContentSkills, 83); $jsonContentProjet = '"projet": ' . substr($jsonContentProjet, 83); $jsonTotal = '{' . $jsonContentUser . ',' . $jsonContentMachine . ',' . $jsonContentProjet . ',' . $jsonContentSkills . '}'; //Recherche User $typeUser = $this->get('fos_elastica.index.fablab.User'); $query_part_user = new \Elastica\Query\BoolQuery(); $fieldQuery = new \Elastica\Query\Match(); $fieldQuery2 = new \Elastica\Query\Match(); $fieldQuery9 = new \Elastica\Query\Match(); $fieldQuery10 = new \Elastica\Query\Match(); $fieldQuery->setFieldQuery('email', $search); $fieldQuery->setFieldFuzziness('email', 0.2); $query_part_user->addShould($fieldQuery); $fieldQuery9->setFieldQuery('firstname', $search); $fieldQuery9->setFieldFuzziness('firstname', 0.2); $query_part_user->addShould($fieldQuery9); $fieldQuery10->setFieldQuery('lastname', $search); $fieldQuery10->setFieldFuzziness('lastname', 0.2); $query_part_user->addShould($fieldQuery10); $fieldQuery2->setFieldQuery('username', $search); $fieldQuery2->setFieldFuzziness('username', 0.2); $query_part_user->addShould($fieldQuery2); $filters = new \Elastica\Filter\Bool(); $query_user = new \Elastica\Query\Filtered($query_part_user, $filters); $result_user = $typeUser->search($query_user); //Recherche Machine $typeMachine = $this->get('fos_elastica.index.fablab.Machine'); $query_part_machine = new \Elastica\Query\Bool(); $fieldQuery3 = new \Elastica\Query\Match(); $fieldQuery4 = new \Elastica\Query\Match(); $fieldQuery3->setFieldQuery('name', $search); $fieldQuery3->setFieldFuzziness('name', 0.2); $fieldQuery3->setFieldMinimumShouldMatch('name', '80%'); $query_part_machine->addShould($fieldQuery3); $fieldQuery4->setFieldQuery('description', $search); $fieldQuery4->setFieldFuzziness('description', 2); $fieldQuery4->setFieldMinimumShouldMatch('description', '100%'); $query_part_machine->addShould($fieldQuery4); $filters = new \Elastica\Filter\Bool(); $query_machine = new \Elastica\Query\Filtered($query_part_machine, $filters); $result_machine = $typeMachine->search($query_machine); //Recherche Skills $typeSkills = $this->get('fos_elastica.index.fablab.Competence'); $query_part_skills = new \Elastica\Query\Bool(); $fieldQuery5 = new \Elastica\Query\Match(); $fieldQuery5->setFieldQuery('name', $search); $fieldQuery5->setFieldFuzziness('name', 2); $fieldQuery5->setFieldMinimumShouldMatch('name', '40%'); $query_part_skills->addShould($fieldQuery5); $filters = new \Elastica\Filter\Bool(); $query_skills = new \Elastica\Query\Filtered($query_part_skills, $filters); $result_skills = $typeSkills->search($query_skills); //Recherche projet $typeProjet = $this->get('fos_elastica.index.fablab.Projet'); $query_part_projet = new \Elastica\Query\Bool(); $fieldQuery6 = new \Elastica\Query\Match(); $fieldQuery7 = new \Elastica\Query\Match(); $fieldQuery6->setFieldQuery('name', $search); $fieldQuery6->setFieldFuzziness('name', 0.2); $fieldQuery6->setFieldMinimumShouldMatch('name', '80%'); $query_part_projet->addShould($fieldQuery6); $fieldQuery7->setFieldQuery('summary', $search); $fieldQuery7->setFieldFuzziness('summary', 2); $fieldQuery7->setFieldMinimumShouldMatch('summary', '100%'); $query_part_projet->addShould($fieldQuery7); $filters = new \Elastica\Filter\Bool(); $query_projet = new \Elastica\Query\Filtered($query_part_projet, $filters); $result_projet = $typeProjet->search($query_projet); // $encoder = array(new JsonEncoder()); $normalizer = array(new ObjectNormalizer()); $serializer = new Serializer($normalizer, $encoder); } return $this->render('CentraleLilleSearchBundle:Default:search.html.twig', array('result_user' => $result_user, 'result_machine' => $result_machine, 'result_competence' => $result_skills, 'result_project' => $result_projet, 'search' => $search, 'userjson' => $jsonContentUser, 'machinejson' => $jsonContentMachine, 'jsonTotal' => $jsonTotal)); }
private function configureHighlightingForSource(&$config, $highlightSource) { global $wgCirrusSearchRegexMaxDeterminizedStates; $patterns = array(); $locale = null; $caseInsensitive = false; foreach ($highlightSource as $part) { if (isset($part['pattern'])) { $patterns[] = $part['pattern']; $locale = $part['locale']; $caseInsensitive |= $part['insensitive']; } } if (count($patterns)) { $options = array('regex' => $patterns, 'locale' => $locale, 'regex_flavor' => 'lucene', 'skip_query' => true, 'regex_case_insensitive' => (bool) $caseInsensitive, 'max_determinized_states' => $wgCirrusSearchRegexMaxDeterminizedStates); $config['fields']['source_text.plain']['options'] = array_merge($config['fields']['source_text.plain']['options'], $options); return; } $queryStrings = array(); foreach ($highlightSource as $part) { if (isset($part['query'])) { $queryStrings[] = $part['query']; } } if (count($queryStrings)) { $bool = new \Elastica\Query\Bool(); foreach ($queryStrings as $queryString) { $bool->addShould($queryString); } $config['fields']['source_text.plain']['highlight_query'] = $bool->toArray(); } }
public function search($category, PlaceSearch $placeSearch) { // we create a query to return all the articles // but if the criteria title is specified, we use it $boolQuery = new \Elastica\Query\Bool(); /*Fetch only VALIDATED place*/ $queryStatus = new \Elastica\Query\Match(); $queryStatus->setFieldQuery('place.status', StatusType::VALIDATED); $boolQuery->addMust($queryStatus); if ($category !== null) { $queryCategory = new \Elastica\Query\Match(); $queryCategory->setFieldQuery('place.categories.slug', $category); $boolQuery->addMust($queryCategory); } if ($placeSearch->getBirthdayDiscount() != null && $placeSearch->getBirthdayDiscount() > 0) { $queryRange = new \Elastica\Query\Range(); $queryRange->setParam('place.birthdayDiscount', ['gte' => 1]); $boolQuery->addMust($queryRange); } if (($placeSearch->getName() != null || $placeSearch->getCategories() != null) && $placeSearch != null) { if ($placeSearch->getName() != null) { $query = new \Elastica\Query\Match(); $query->setFieldQuery('place.name', $placeSearch->getName()); $query->setFieldFuzziness('place.name', 1); $query->setFieldMinimumShouldMatch('place.name', '10%'); $boolQuery->addMust($query); } if ($placeSearch->getCategories() != null) { foreach ($placeSearch->getCategories() as $cat) { $categories[] = $cat->getName(); } $queryCategories = new \Elastica\Query\Terms(); $queryCategories->setTerms('place.categories', $categories); $boolQuery->addShould($queryCategories); } } else { $query = new \Elastica\Query\MatchAll(); } $baseQuery = $boolQuery; // then we create filters depending on the chosen criterias $boolFilter = new \Elastica\Filter\Bool(); $active = new \Elastica\Filter\Term(['membershipSubscriptions.statusSubscription' => MembershipStatusType::ACTIVE]); $boolFilter->addMust($active); /* Dates filter We add this filter only the getIspublished filter is not at "false" */ // if("false" != $articleSearch->getIsPublished() // && null !== $articleSearch->getDateFrom() // && null !== $articleSearch->getDateTo()) // { // $boolFilter->addMust(new \Elastica\Filter\Range('publishedAt', // array( // 'gte' => \Elastica\Util::convertDate($articleSearch->getDateFrom()->getTimestamp()), // 'lte' => \Elastica\Util::convertDate($articleSearch->getDateTo()->getTimestamp()) // ) // )); // } $boolQuery->addMust(new \Elastica\Query\Range('businessHours.startsAt', array('lte' => 'now'))); // $boolQuery->addMust(new \Elastica\Query\Range('businessHours.startsAt', // array( // //'gte' => \Elastica\Util::convertDate($articleSearch->getDateFrom()->getTimestamp()), // 'lte' => 'now' // )) // ); // // Published or not filter if ($placeSearch->getIs24h() !== null && $placeSearch->getIs24h()) { //var_dump($placeSearch->getIs24h());die(); $boolFilter->addMust(new \Elastica\Filter\Term(['is24h' => $placeSearch->getIs24h()])); //$boolFilter->addMust('is24h', $placeSearch->getIs24h()); } if ($placeSearch->getIsWifi() !== null && $placeSearch->getIsWifi()) { $boolFilter->addMust(new \Elastica\Filter\Term(['isWifi' => $placeSearch->getIsWifi()])); } if ($placeSearch->getIsDelivery() !== null && $placeSearch->getIsDelivery()) { $boolFilter->addMust(new \Elastica\Filter\Term(['isDelivery' => $placeSearch->getIsDelivery()])); } //$boolFilter->addMust($active); // $boolFilter->addMust( // new \Elastica\Filter\Term(['place.membershipSubscriptions.statusSubscription' => MembershipStatusType::ACTIVE]) // ); //var_dump($boolFilter);die(); //new \Elastica\Query\ $filtered = new \Elastica\Query\Filtered($baseQuery, $boolFilter); $query = \Elastica\Query::create($filtered); $query->addSort(array('place.membershipSubscriptions.membership.score' => array('order' => 'asc'))); //$query->addSort(array('rating' => array('order' => 'desc'))); var_dump(json_encode($query->getQuery())); die; return $this->find($query); //$qSort = \Elastica\Query::create($filtered); //$query = new \Elastica\Query(); //$query->setQuery($filtered); //$query->setQuery($qSort); //$query->setQuery($fnScoreQuery); //$fnScoreQuery->setQuery($filtered); //$qSort->setQuery($filtered); //return $this->find($query); }
/** * @param string $q * @return \Elastica\Query\AbstractQuery */ protected function _getBaseQuery($q) { if (empty($q)) { $baseQuery = new \Elastica\Query\MatchAll(); } else { $q = $this->_helper->_searchQuery($q); $baseQuery = new \Elastica\Query\Bool(); if ($this->isFuzzyQueryEnabled()) { $fuzzy = new \Elastica\Query\FuzzyLikeThis(); $fuzzy->addFields($this->_getSearchFields(true, $q))->setLikeText($q)->setMinSimilarity($this->getFuzzyMinSimilarity())->setPrefixLength($this->getFuzzyPrefixLength())->setMaxQueryTerms($this->getFuzzyMaxQueryTerms())->setBoost($this->getFuzzyQueryBoost()); $baseQuery->addShould($fuzzy); } $queryString = new \Elastica\Query\QueryString($q); $queryString->setFields($this->_getSearchFields(true, $q)); $queryString->setDefaultOperator($this->getQueryOperator()); $queryString->setBoost('2'); $baseQuery->addShould($queryString); } return $baseQuery; }
protected function parseQueryString($queryString, array $opts) { $fields = $highlights = array(); $terms = preg_split('/\\s+/', $queryString); $match = $opts['match']; $case = $opts['case']; // Map each word in the query string with its corresponding field foreach ($terms as $term) { $prefix = strstr($term, '*', true); if ($prefix) { // For wildcard search $fields['content.prefix_complete'][] = $prefix; } elseif ($case === '1') { // For case sensitive search $fields['content.case_sensitive'][] = $term; } else { $fields['content'][] = $term; } } // Allow searching either by message content or message id (page name // without language subpage) with exact match only. $searchQuery = new \Elastica\Query\Bool(); foreach ($fields as $analyzer => $words) { foreach ($words as $word) { $boolQuery = new \Elastica\Query\Bool(); $contentQuery = new \Elastica\Query\Match(); $contentQuery->setFieldQuery($analyzer, $word); $boolQuery->addShould($contentQuery); $messageQuery = new \Elastica\Query\Term(); $messageQuery->setTerm('localid', $word); $boolQuery->addShould($messageQuery); if ($match === 'all') { $searchQuery->addMust($boolQuery); } else { $searchQuery->addShould($boolQuery); } // Fields for highlighting $highlights[$analyzer] = array('number_of_fragments' => 0); // Allow searching by exact message title (page name with // language subpage). $title = Title::newFromText($word); if (!$title) { continue; } $handle = new MessageHandle($title); if ($handle->isValid() && $handle->getCode() !== '') { $localid = $handle->getTitleForBase()->getPrefixedText(); $boolQuery = new \Elastica\Query\Bool(); $messageId = new \Elastica\Query\Term(); $messageId->setTerm('localid', $localid); $boolQuery->addMust($messageId); $searchQuery->addShould($boolQuery); } } } return array($searchQuery, $highlights); }