Example #1
0
 public function buildQuery(QueryContext $context)
 {
     $query_builder = function (array $fields) {
         $index_fields = [];
         foreach ($fields as $field) {
             $index_fields[] = $field->getIndexField(true);
         }
         $query = null;
         if (count($index_fields) > 1) {
             $query = ['multi_match' => ['query' => $this->text, 'fields' => $index_fields, 'analyzer' => 'keyword']];
         } elseif (count($index_fields) === 1) {
             $index_field = reset($index_fields);
             $query = ['term' => [$index_field => $this->text]];
         }
         return $query;
     };
     $unrestricted_fields = $context->getUnrestrictedFields();
     $unrestricted_fields = ValueChecker::filterByValueCompatibility($unrestricted_fields, $this->text);
     $query = $query_builder($unrestricted_fields);
     $private_fields = $context->getPrivateFields();
     $private_fields = ValueChecker::filterByValueCompatibility($private_fields, $this->text);
     foreach (QueryHelper::wrapPrivateFieldQueries($private_fields, $query_builder) as $private_field_query) {
         $query = QueryHelper::applyBooleanClause($query, 'should', $private_field_query);
     }
     return $query;
 }
Example #2
0
 public function buildQuery(QueryContext $context)
 {
     $query_builder = function (array $fields) use($context) {
         // Full text
         $index_fields = [];
         foreach (ValueChecker::filterByValueCompatibility($fields, $this->text) as $field) {
             foreach ($context->localizeField($field) as $f) {
                 $index_fields[] = $f;
             }
         }
         if (!$index_fields) {
             return null;
         }
         $query = ['multi_match' => ['fields' => $index_fields, 'query' => $this->text, 'type' => 'cross_fields', 'operator' => 'and', 'lenient' => true]];
         // Thesaurus
         $concept_queries = $this->buildConceptQueries($fields);
         foreach ($concept_queries as $concept_query) {
             $query = QueryHelper::applyBooleanClause($query, 'should', $concept_query);
         }
         return $query;
     };
     // Unrestricted fields
     $query = $query_builder($context->getUnrestrictedFields());
     // Private fields
     $private_fields = $context->getPrivateFields();
     foreach (QueryHelper::wrapPrivateFieldQueries($private_fields, $query_builder) as $private_field_query) {
         $query = QueryHelper::applyBooleanClause($query, 'should', $private_field_query);
     }
     return $query;
 }
Example #3
0
 public function buildQuery(QueryContext $context)
 {
     $query_builder = function (array $fields) {
         $concept_queries = $this->buildConceptQueries($fields);
         $query = null;
         foreach ($concept_queries as $concept_query) {
             $query = QueryHelper::applyBooleanClause($query, 'should', $concept_query);
         }
         return $query;
     };
     $query = $query_builder($context->getUnrestrictedFields());
     $private_fields = $context->getPrivateFields();
     foreach (QueryHelper::wrapPrivateFieldQueries($private_fields, $query_builder) as $concept_query) {
         $query = QueryHelper::applyBooleanClause($query, 'should', $concept_query);
     }
     return $query;
 }
Example #4
0
 public function buildQuery(QueryContext $context)
 {
     $query_builder = function (array $fields) use($context) {
         $index_fields = [];
         foreach ($fields as $field) {
             foreach ($context->localizeField($field) as $f) {
                 $index_fields[] = $f;
             }
         }
         if (!$index_fields) {
             return null;
         }
         return ['multi_match' => ['type' => 'phrase', 'fields' => $index_fields, 'query' => $this->text, 'lenient' => true]];
     };
     $unrestricted_fields = $context->getUnrestrictedFields();
     $unrestricted_fields = ValueChecker::filterByValueCompatibility($unrestricted_fields, $this->text);
     $query = $query_builder($unrestricted_fields);
     $private_fields = $context->getPrivateFields();
     $private_fields = ValueChecker::filterByValueCompatibility($private_fields, $this->text);
     foreach (QueryHelper::wrapPrivateFieldQueries($private_fields, $query_builder) as $private_field_query) {
         $query = QueryHelper::applyBooleanClause($query, 'should', $private_field_query);
     }
     return $query;
 }
Example #5
0
 private function visitEqualNode(TreeNode $node)
 {
     return $this->handleBinaryExpression($node, function ($left, $right) {
         if ($this->isDateKey($left)) {
             try {
                 // Try to create a range for incomplete dates
                 $range = QueryHelper::getRangeFromDateString($right);
                 return new AST\KeyValue\RangeExpression($left, $range['from'], true, $range['to'], false);
             } catch (\InvalidArgumentException $e) {
                 // Fall back to equal expression
             }
         }
         return new AST\KeyValue\EqualExpression($left, $right);
     });
 }
Example #6
0
 public function postProcessQuery($query, QueryContext $context)
 {
     $field = $this->getField($context);
     return QueryHelper::wrapPrivateFieldQuery($field, $query);
 }