You are here

protected function SearchBuilder::flattenKeys in Elasticsearch Connector 8.5

Same name and namespace in other branches
  1. 8.7 src/ElasticSearch/Parameters/Builder/SearchBuilder.php \Drupal\elasticsearch_connector\ElasticSearch\Parameters\Builder\SearchBuilder::flattenKeys()
  2. 8.2 src/ElasticSearch/Parameters/Builder/SearchBuilder.php \Drupal\elasticsearch_connector\ElasticSearch\Parameters\Builder\SearchBuilder::flattenKeys()
  3. 8.6 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 285

Class

SearchBuilder
Class SearchBuilder.

Namespace

Drupal\elasticsearch_connector\ElasticSearch\Parameters\Builder

Code

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;
}