protected function SearchBuilder::flattenKeys in Elasticsearch Connector 8.6
Same name and namespace in other branches
- 8.7 src/ElasticSearch/Parameters/Builder/SearchBuilder.php \Drupal\elasticsearch_connector\ElasticSearch\Parameters\Builder\SearchBuilder::flattenKeys()
- 8.2 src/ElasticSearch/Parameters/Builder/SearchBuilder.php \Drupal\elasticsearch_connector\ElasticSearch\Parameters\Builder\SearchBuilder::flattenKeys()
- 8.5 src/ElasticSearch/Parameters/Builder/SearchBuilder.php \Drupal\elasticsearch_connector\ElasticSearch\Parameters\Builder\SearchBuilder::flattenKeys()
Turn the given search keys into a lucene object structure.
Parameters
array $keys: Search keys, in the format described by \Drupal\search_api\ParseMode\ParseModeInterface::parseInput().
\Drupal\search_api\ParseMode\ParseModeInterface $parse_mode: Search API parse mode.
bool $fuzzy: Enable fuzzy support or not.
Return value
\MakinaCorpus\Lucene\AbstractQuery Return a lucene query object.
1 call to SearchBuilder::flattenKeys()
- SearchBuilder::getSearchQueryOptions in src/
ElasticSearch/ Parameters/ Builder/ SearchBuilder.php - Helper function to return associative array with query options.
File
- src/
ElasticSearch/ Parameters/ Builder/ SearchBuilder.php, line 294
Class
- SearchBuilder
- Class SearchBuilder.
Namespace
Drupal\elasticsearch_connector\ElasticSearch\Parameters\BuilderCode
protected function flattenKeys(array $keys, ParseModeInterface $parse_mode = NULL, $fuzzy = TRUE) {
// Grab the conjunction and negation properties if present.
$conjunction = isset($keys['#conjunction']) ? $keys['#conjunction'] : 'AND';
$negation = !empty($keys['#negation']);
// Create a top level query.
$query = (new TermCollectionQuery())
->setOperator($conjunction);
if ($negation) {
$query
->setExclusion(Query::OP_PROHIBIT);
}
// Filter out top level properties beginning with '#'.
$keys = array_filter($keys, function ($key) {
return $key[0] !== '#';
}, ARRAY_FILTER_USE_KEY);
// Loop over the keys.
foreach ($keys as $key) {
$element = NULL;
if (is_array($key)) {
$element = $this
->luceneFlattenKeys($key, $parse_mode);
}
elseif (is_string($key)) {
$element = (new TermQuery())
->setValue($key);
if ($fuzzy) {
$element
->setFuzzyness($fuzzy);
}
}
if (isset($element)) {
$query
->add($element);
}
}
return $query;
}