public function autocomplete($label, $includeDeleted = false, $autoStatus = true) { $lang = $this->lang; $label = strtolower($label); $labelSearchField = 'LexicalLabels'; $labelReturnField = $this->_getLabelReturnField(); if (null !== ($labelField = $this->getQueryParam('searchLabel', 'prefLabel'))) { if (preg_match('/^(pref|alt|hidden)Label$/', $labelField)) { $labelSearchField = $labelField; } } $labelSearchFieldAutocomplete = $labelSearchField . 'Autocomplete'; $labelSearchFieldAutocomplete .= null === $lang ? '' : '@' . $lang; $labelSearchFieldText = $labelSearchField . 'Text'; $labelSearchFieldText .= null === $lang ? '' : '@' . $lang; // Quotes or spaces not working if the search is not escaped. // We do not escape * and ? because they sometimes are used for searching. $labelEscaped = OpenSKOS_Solr_Queryparser_Editor_ParseSearchText::escapeSpecialChars($label); $q = "({$labelSearchFieldAutocomplete}:{$labelEscaped} OR {$labelSearchFieldText}:{$labelEscaped}*)"; //only return non-deleted items: if (false === $includeDeleted) { $q = "({$q}) AND deleted:false"; } if ($autoStatus) { $q = Api_Models_Utils::addStatusToQuery($q); } $params = array('facet' => 'true', 'facet.field' => $labelReturnField, 'fq' => $q, 'facet.mincount' => 1); $response = $this->solr()->setFields(array('uuid', $labelReturnField))->limit(0, 0)->search($q, $params); $this->solr()->setFields(array()); $labels = array(); foreach ($response['facet_counts']['facet_fields'][$labelReturnField] as $label => $count) { $labels[] = $label; } return $labels; }