我有以下代码:
CompassQuery suggested = hits.getSuggestedQuery()
String displayedSuggestion = suggested.toString();
如果只是这样做,我会得到带有别名和查询运算符的讨厌的字符串:+(alias:item) field:keyword1 OR field:keyword2
我怎样才能得到这样的简单坐姿?:
keyword1 keyword2
我有以下代码:
CompassQuery suggested = hits.getSuggestedQuery()
String displayedSuggestion = suggested.toString();
如果只是这样做,我会得到带有别名和查询运算符的讨厌的字符串:+(alias:item) field:keyword1 OR field:keyword2
keyword1 keyword2
我最近自己也遇到了同样的问题。我可以使它可靠地工作的唯一方法是这样的代码:
import static org.apache.commons.lang.StringUtils.*;
import java.util.ArrayList;
import java.util.List;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.Query;
import org.compass.core.CompassQuery;
import org.compass.core.engine.SearchEngineException;
import org.compass.core.engine.SearchEngineQuery;
import org.compass.core.impl.DefaultCompassQuery;
import org.compass.core.lucene.engine.LuceneSearchEngineQuery;
import org.compass.core.lucene.engine.queryparser.QueryParserUtils;
public class SearchTermExtractor {
public String extract(CompassQuery compassQuery, final String fieldName) {
SearchEngineQuery searchEngineQuery = ((DefaultCompassQuery)compassQuery).getSearchEngineQuery();
Query luceneQuery = ((LuceneSearchEngineQuery)searchEngineQuery).getQuery();
final List<String> suggestedTerms = new ArrayList<String>();
// Use a visitor to extract the terms
QueryParserUtils.visit(luceneQuery, new QueryParserUtils.QueryTermVisitor() {
@Override
public Term replaceTerm(Term term) throws SearchEngineException {
if (fieldName.equals(term.field())) {
suggestedTerms.add(term.text());
}
// Just return the original term, we're not trying to modify the query itself
return term;
}
});
return join(suggestedTerms, ' '); // join is from Commons Lang StringUtils
}
}
该fieldName
参数是用于您要提取的术语的字段(field
在您的示例中)。