/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.portal.search.solr.internal.query;
import com.liferay.portal.kernel.search.BooleanQuery;
import com.liferay.portal.kernel.search.Query;
import com.liferay.portal.kernel.search.SearchContext;
import com.liferay.portal.kernel.search.TermQuery;
import com.liferay.portal.kernel.search.TermRangeQuery;
import com.liferay.portal.kernel.search.WildcardQuery;
import com.liferay.portal.kernel.search.generic.DisMaxQuery;
import com.liferay.portal.kernel.search.generic.FuzzyQuery;
import com.liferay.portal.kernel.search.generic.MatchAllQuery;
import com.liferay.portal.kernel.search.generic.MatchQuery;
import com.liferay.portal.kernel.search.generic.MoreLikeThisQuery;
import com.liferay.portal.kernel.search.generic.MultiMatchQuery;
import com.liferay.portal.kernel.search.generic.NestedQuery;
import com.liferay.portal.kernel.search.generic.StringQuery;
import com.liferay.portal.kernel.search.query.QueryTranslator;
import com.liferay.portal.kernel.search.query.QueryVisitor;
import com.liferay.portal.search.solr.query.BooleanQueryTranslator;
import com.liferay.portal.search.solr.query.DisMaxQueryTranslator;
import com.liferay.portal.search.solr.query.FuzzyQueryTranslator;
import com.liferay.portal.search.solr.query.LuceneQueryConverter;
import com.liferay.portal.search.solr.query.MatchAllQueryTranslator;
import com.liferay.portal.search.solr.query.MatchQueryTranslator;
import com.liferay.portal.search.solr.query.MoreLikeThisQueryTranslator;
import com.liferay.portal.search.solr.query.MultiMatchQueryTranslator;
import com.liferay.portal.search.solr.query.NestedQueryTranslator;
import com.liferay.portal.search.solr.query.StringQueryTranslator;
import com.liferay.portal.search.solr.query.TermQueryTranslator;
import com.liferay.portal.search.solr.query.TermRangeQueryTranslator;
import com.liferay.portal.search.solr.query.WildcardQueryTranslator;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
/**
* @author André de Oliveira
* @author Miguel Angelo Caldas Gallindo
*/
@Component(
immediate = true, property = {"search.engine.impl=Solr"},
service = {LuceneQueryConverter.class, QueryTranslator.class}
)
public class SolrQueryTranslator
implements LuceneQueryConverter, QueryTranslator<String>,
QueryVisitor<org.apache.lucene.search.Query> {
@Override
public org.apache.lucene.search.Query convert(Query query) {
return query.accept(this);
}
@Override
public String translate(Query query, SearchContext searchContext) {
org.apache.lucene.search.Query luceneQuery = query.accept(this);
String queryString = null;
if (luceneQuery != null) {
queryString = luceneQuery.toString();
}
else {
queryString = _postProcess(query.toString(), searchContext);
}
return queryString;
}
@Override
public org.apache.lucene.search.Query visitQuery(
BooleanQuery booleanQuery) {
return _booleanQueryTranslator.translate(booleanQuery, this);
}
@Override
public org.apache.lucene.search.Query visitQuery(DisMaxQuery disMaxQuery) {
return _disMaxQueryTranslator.translate(disMaxQuery, this);
}
@Override
public org.apache.lucene.search.Query visitQuery(FuzzyQuery fuzzyQuery) {
return _fuzzyQueryTranslator.translate(fuzzyQuery);
}
@Override
public org.apache.lucene.search.Query visitQuery(
MatchAllQuery matchAllQuery) {
return _matchAllQueryTranslator.translate(matchAllQuery);
}
@Override
public org.apache.lucene.search.Query visitQuery(MatchQuery matchQuery) {
return _matchQueryTranslator.translate(matchQuery);
}
@Override
public org.apache.lucene.search.Query visitQuery(
MoreLikeThisQuery moreLikeThisQuery) {
return _moreLikeThisQueryTranslator.translate(moreLikeThisQuery);
}
@Override
public org.apache.lucene.search.Query visitQuery(
MultiMatchQuery multiMatchQuery) {
return _multiMatchQueryTranslator.translate(multiMatchQuery);
}
@Override
public org.apache.lucene.search.Query visitQuery(NestedQuery nestedQuery) {
return _nestedQueryTranslator.translate(nestedQuery, this);
}
@Override
public org.apache.lucene.search.Query visitQuery(StringQuery stringQuery) {
return _stringQueryTranslator.translate(stringQuery);
}
@Override
public org.apache.lucene.search.Query visitQuery(TermQuery termQuery) {
return _termQueryTranslator.translate(termQuery);
}
@Override
public org.apache.lucene.search.Query visitQuery(
TermRangeQuery termRangeQuery) {
return _termRangeQueryTranslator.translate(termRangeQuery);
}
@Override
public org.apache.lucene.search.Query visitQuery(
WildcardQuery wildcardQuery) {
return _wildcardQueryTranslator.translate(wildcardQuery);
}
@Reference(unbind = "-")
protected void setBooleanQueryTranslator(
BooleanQueryTranslator booleanQueryTranslator) {
_booleanQueryTranslator = booleanQueryTranslator;
}
@Reference(unbind = "-")
protected void setDisMaxQueryTranslator(
DisMaxQueryTranslator disMaxQueryTranslator) {
_disMaxQueryTranslator = disMaxQueryTranslator;
}
@Reference(unbind = "-")
protected void setFuzzyQueryTranslator(
FuzzyQueryTranslator fuzzyQueryTranslator) {
_fuzzyQueryTranslator = fuzzyQueryTranslator;
}
@Reference(unbind = "-")
protected void setMatchAllQueryTranslator(
MatchAllQueryTranslator matchAllQueryTranslator) {
_matchAllQueryTranslator = matchAllQueryTranslator;
}
@Reference(unbind = "-")
protected void setMatchQueryTranslator(
MatchQueryTranslator matchQueryTranslator) {
_matchQueryTranslator = matchQueryTranslator;
}
@Reference(unbind = "-")
protected void setMoreLikeThisQueryTranslator(
MoreLikeThisQueryTranslator moreLikeThisQueryTranslator) {
_moreLikeThisQueryTranslator = moreLikeThisQueryTranslator;
}
@Reference(unbind = "-")
protected void setMultiMatchQueryTranslator(
MultiMatchQueryTranslator multiMatchQueryTranslator) {
_multiMatchQueryTranslator = multiMatchQueryTranslator;
}
@Reference(unbind = "-")
protected void setNestedQueryTranslator(
NestedQueryTranslator nestedQueryTranslator) {
_nestedQueryTranslator = nestedQueryTranslator;
}
@Reference(unbind = "-")
protected void setStringQueryTranslator(
StringQueryTranslator stringQueryTranslator) {
_stringQueryTranslator = stringQueryTranslator;
}
@Reference(unbind = "-")
protected void setTermQueryTranslator(
TermQueryTranslator termQueryTranslator) {
_termQueryTranslator = termQueryTranslator;
}
@Reference(unbind = "-")
protected void setTermRangeQueryTranslator(
TermRangeQueryTranslator termRangeQueryTranslator) {
_termRangeQueryTranslator = termRangeQueryTranslator;
}
@Reference(unbind = "-")
protected void setWildcardQueryTranslator(
WildcardQueryTranslator wildcardQueryTranslator) {
_wildcardQueryTranslator = wildcardQueryTranslator;
}
private String _postProcess(
String queryString, SearchContext searchContext) {
SolrPostProcesor solrPostProcesor = new SolrPostProcesor(
queryString, searchContext.getKeywords());
return solrPostProcesor.postProcess();
}
private BooleanQueryTranslator _booleanQueryTranslator;
private DisMaxQueryTranslator _disMaxQueryTranslator;
private FuzzyQueryTranslator _fuzzyQueryTranslator;
private MatchAllQueryTranslator _matchAllQueryTranslator;
private MatchQueryTranslator _matchQueryTranslator;
private MoreLikeThisQueryTranslator _moreLikeThisQueryTranslator;
private MultiMatchQueryTranslator _multiMatchQueryTranslator;
private NestedQueryTranslator _nestedQueryTranslator;
private StringQueryTranslator _stringQueryTranslator;
private TermQueryTranslator _termQueryTranslator;
private TermRangeQueryTranslator _termRangeQueryTranslator;
private WildcardQueryTranslator _wildcardQueryTranslator;
}