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) 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;
 }
 /**
  * @dataProvider escapeRawProvider
  */
 public function testValueCompatibility($subject, $value, $compatible)
 {
     $this->assertEquals($compatible, ValueChecker::isValueCompatible($subject, $value));
 }
Example #5
0
 public function isValueCompatible($value, QueryContext $context)
 {
     return ValueChecker::isValueCompatible($this, $value);
 }