/** * Returns all field qualifiers in parsed queryString * * @param LuceneSyntaxParser $po_query * @return array */ private static function _getFieldList($po_query) { $va_fields = array(); switch (get_class($po_query)) { case 'Zend_Search_Lucene_Search_Query_Boolean': $va_items = $po_query->getSubqueries(); break; case 'Zend_Search_Lucene_Search_Query_MultiTerm': $va_items = $po_query->getTerms(); break; default: $va_items = array(); break; } $vn_i = 0; foreach ($va_items as $o_term) { switch (get_class($o_term)) { case 'Zend_Search_Lucene_Search_Query_Preprocessing_Term': $va_fields[] = $o_term->getTerm()->field; break; case 'Zend_Search_Lucene_Search_Query_Term': $va_fields[] = $o_term->getTerm()->field; break; case 'Zend_Search_Lucene_Index_Term': $va_fields[] = $o_term->getTerm()->field; break; //case 'Zend_Search_Lucene_Search_Query_Wildcard': //$va_fields = $o_term->getTerm()->field; // break; //case 'Zend_Search_Lucene_Search_Query_Wildcard': //$va_fields = $o_term->getTerm()->field; // break; case 'Zend_Search_Lucene_Search_Query_Phrase': $va_phrase_items = $o_term->getTerms(); foreach ($va_phrase_items as $o_term) { $va_fields[] = $o_term->field; } break; case 'Zend_Search_Lucene_Search_Query_MultiTerm': $va_fields = array_merge($va_fields, SearchEngine::_getFieldList($o_term)); break; case 'Zend_Search_Lucene_Search_Query_Boolean': $va_fields = array_merge($va_fields, SearchEngine::_getFieldList($o_term)); break; case 'Zend_Search_Lucene_Search_Query_Range': $va_fields[] = $o_term->getTerm()->field; break; default: // NOOP (TODO: do *something*) break; } $vn_i++; } return $va_fields; }