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; }
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 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()); }
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)); }
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]; }