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;
 }
Beispiel #3
0
 public function buildQuery(QueryContext $context)
 {
     $name = FlagStructure::normalizeName($this->name);
     $flag = $context->getFlag($name);
     if (!$flag) {
         throw new QueryException(sprintf('Flag "%s" does not exist', $this->name));
     }
     return ['term' => [$flag->getIndexField() => $this->set]];
 }
 public function testGetPrivateFields()
 {
     $foo_field = new Field('foo', Mapping::TYPE_STRING, ['private' => true]);
     $bar_field = new Field('bar', Mapping::TYPE_STRING, ['private' => true]);
     $structure = $this->prophesize(Structure::class);
     $structure->getPrivateFields()->willReturn(['foo' => $foo_field, 'bar' => $bar_field]);
     $context = new QueryContext($structure->reveal(), [], 'fr');
     $this->assertEquals([$foo_field, $bar_field], $context->getPrivateFields());
     $narrowed_context = new QueryContext($structure->reveal(), [], 'fr', ['foo']);
     $this->assertEquals([$foo_field], $narrowed_context->getPrivateFields());
 }
Beispiel #5
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;
 }
 public function buildQuery(QueryContext $context)
 {
     $fields = array($this->field->getValue());
     return $this->expression->buildQuery($context->narrowToFields($fields));
 }
Beispiel #8
0
 public function buildQuery(QueryContext $context)
 {
     return ['multi_match' => ['fields' => $context->getLocalizedFields(), 'query' => $this->prefix, 'type' => 'phrase_prefix']];
 }
 private function buildHighlightRules(QueryContext $context)
 {
     $highlighted_fields = [];
     foreach ($context->getHighlightedFields() as $field) {
         switch ($field->getType()) {
             case Mapping::TYPE_STRING:
                 $index_field = $field->getIndexField();
                 $raw_index_field = $field->getIndexField(true);
                 $highlighted_fields[$index_field] = ['matched_fields' => [$index_field, $raw_index_field], 'type' => 'fvh'];
                 break;
             case Mapping::TYPE_FLOAT:
             case Mapping::TYPE_DOUBLE:
             case Mapping::TYPE_INTEGER:
             case Mapping::TYPE_LONG:
             case Mapping::TYPE_SHORT:
             case Mapping::TYPE_BYTE:
                 continue;
             case Mapping::TYPE_DATE:
             default:
                 continue;
         }
     }
     return ['pre_tags' => ['[[em]]'], 'post_tags' => ['[[/em]]'], 'order' => 'score', 'fields' => $highlighted_fields];
 }