Beispiel #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;
 }
Beispiel #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;
 }
 public function testGetUnrestrictedFields()
 {
     $foo_field = new Field('foo', Mapping::TYPE_STRING, ['private' => false]);
     $bar_field = new Field('bar', Mapping::TYPE_STRING, ['private' => false]);
     $structure = $this->prophesize(Structure::class);
     $structure->getUnrestrictedFields()->willReturn(['foo' => $foo_field, 'bar' => $bar_field]);
     $context = new QueryContext($structure->reveal(), [], 'fr');
     $this->assertEquals([$foo_field, $bar_field], $context->getUnrestrictedFields());
     $narrowed_context = new QueryContext($structure->reveal(), [], 'fr', ['foo']);
     $this->assertEquals([$foo_field], $narrowed_context->getUnrestrictedFields());
 }
Beispiel #4
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;
 }
 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;
 }