Пример #1
0
 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;
 }