|
@@ -82,6 +82,8 @@ public class QueryHelper {
|
|
|
|
|
|
protected static final String INURL_FIELD = "inurl";
|
|
protected static final String INURL_FIELD = "inurl";
|
|
|
|
|
|
|
|
+ protected static final String SITE_FIELD = "site";
|
|
|
|
+
|
|
@Resource
|
|
@Resource
|
|
protected FessConfig fessConfig;
|
|
protected FessConfig fessConfig;
|
|
|
|
|
|
@@ -193,6 +195,7 @@ public class QueryHelper {
|
|
fessConfig.getIndexFieldUrl(), //
|
|
fessConfig.getIndexFieldUrl(), //
|
|
fessConfig.getIndexFieldDocId(), //
|
|
fessConfig.getIndexFieldDocId(), //
|
|
fessConfig.getIndexFieldHost(), //
|
|
fessConfig.getIndexFieldHost(), //
|
|
|
|
+ fessConfig.getIndexFieldSite(), //
|
|
fessConfig.getIndexFieldTitle(), //
|
|
fessConfig.getIndexFieldTitle(), //
|
|
fessConfig.getIndexFieldContent(), //
|
|
fessConfig.getIndexFieldContent(), //
|
|
fessConfig.getIndexFieldContentLength(), //
|
|
fessConfig.getIndexFieldContentLength(), //
|
|
@@ -415,7 +418,10 @@ public class QueryHelper {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- return boolQuery;
|
|
|
|
|
|
+ if (boolQuery.hasClauses()) {
|
|
|
|
+ return boolQuery;
|
|
|
|
+ }
|
|
|
|
+ return null;
|
|
}
|
|
}
|
|
|
|
|
|
protected String toLowercaseWildcard(final String value) {
|
|
protected String toLowercaseWildcard(final String value) {
|
|
@@ -425,8 +431,15 @@ public class QueryHelper {
|
|
return value;
|
|
return value;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ protected String getSearchField(final QueryContext context, final String field) {
|
|
|
|
+ if (Constants.DEFAULT_FIELD.equals(field) && context.getDefaultField() != null) {
|
|
|
|
+ return context.getDefaultField();
|
|
|
|
+ }
|
|
|
|
+ return field;
|
|
|
|
+ }
|
|
|
|
+
|
|
protected QueryBuilder convertWildcardQuery(final QueryContext context, final WildcardQuery wildcardQuery, final float boost) {
|
|
protected QueryBuilder convertWildcardQuery(final QueryContext context, final WildcardQuery wildcardQuery, final float boost) {
|
|
- final String field = wildcardQuery.getField();
|
|
|
|
|
|
+ final String field = getSearchField(context, wildcardQuery.getField());
|
|
if (Constants.DEFAULT_FIELD.equals(field)) {
|
|
if (Constants.DEFAULT_FIELD.equals(field)) {
|
|
context.addFieldLog(field, wildcardQuery.getTerm().text());
|
|
context.addFieldLog(field, wildcardQuery.getTerm().text());
|
|
return buildDefaultQueryBuilder((f, b) -> QueryBuilders.wildcardQuery(f, toLowercaseWildcard(wildcardQuery.getTerm().text()))
|
|
return buildDefaultQueryBuilder((f, b) -> QueryBuilders.wildcardQuery(f, toLowercaseWildcard(wildcardQuery.getTerm().text()))
|
|
@@ -444,7 +457,7 @@ public class QueryHelper {
|
|
}
|
|
}
|
|
|
|
|
|
protected QueryBuilder convertPrefixQuery(final QueryContext context, final PrefixQuery prefixQuery, final float boost) {
|
|
protected QueryBuilder convertPrefixQuery(final QueryContext context, final PrefixQuery prefixQuery, final float boost) {
|
|
- final String field = prefixQuery.getField();
|
|
|
|
|
|
+ final String field = getSearchField(context, prefixQuery.getField());
|
|
if (Constants.DEFAULT_FIELD.equals(field)) {
|
|
if (Constants.DEFAULT_FIELD.equals(field)) {
|
|
context.addFieldLog(field, prefixQuery.getPrefix().text());
|
|
context.addFieldLog(field, prefixQuery.getPrefix().text());
|
|
return buildDefaultQueryBuilder((f, b) -> QueryBuilders.prefixQuery(f, toLowercaseWildcard(prefixQuery.getPrefix().text()))
|
|
return buildDefaultQueryBuilder((f, b) -> QueryBuilders.prefixQuery(f, toLowercaseWildcard(prefixQuery.getPrefix().text()))
|
|
@@ -463,7 +476,7 @@ public class QueryHelper {
|
|
|
|
|
|
protected QueryBuilder convertFuzzyQuery(final QueryContext context, final FuzzyQuery fuzzyQuery, final float boost) {
|
|
protected QueryBuilder convertFuzzyQuery(final QueryContext context, final FuzzyQuery fuzzyQuery, final float boost) {
|
|
final Term term = fuzzyQuery.getTerm();
|
|
final Term term = fuzzyQuery.getTerm();
|
|
- final String field = term.field();
|
|
|
|
|
|
+ final String field = getSearchField(context, term.field());
|
|
// TODO fuzzy value
|
|
// TODO fuzzy value
|
|
if (Constants.DEFAULT_FIELD.equals(field)) {
|
|
if (Constants.DEFAULT_FIELD.equals(field)) {
|
|
context.addFieldLog(field, term.text());
|
|
context.addFieldLog(field, term.text());
|
|
@@ -482,7 +495,7 @@ public class QueryHelper {
|
|
}
|
|
}
|
|
|
|
|
|
protected QueryBuilder convertTermRangeQuery(final QueryContext context, final TermRangeQuery termRangeQuery, final float boost) {
|
|
protected QueryBuilder convertTermRangeQuery(final QueryContext context, final TermRangeQuery termRangeQuery, final float boost) {
|
|
- final String field = termRangeQuery.getField();
|
|
|
|
|
|
+ final String field = getSearchField(context, termRangeQuery.getField());
|
|
if (isSearchField(field)) {
|
|
if (isSearchField(field)) {
|
|
context.addFieldLog(field, termRangeQuery.toString(field));
|
|
context.addFieldLog(field, termRangeQuery.toString(field));
|
|
final RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery(field);
|
|
final RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery(field);
|
|
@@ -530,7 +543,7 @@ public class QueryHelper {
|
|
}
|
|
}
|
|
|
|
|
|
protected QueryBuilder convertTermQuery(final QueryContext context, final TermQuery termQuery, final float boost) {
|
|
protected QueryBuilder convertTermQuery(final QueryContext context, final TermQuery termQuery, final float boost) {
|
|
- final String field = termQuery.getTerm().field();
|
|
|
|
|
|
+ final String field = getSearchField(context, termQuery.getTerm().field());
|
|
final String text = termQuery.getTerm().text();
|
|
final String text = termQuery.getTerm().text();
|
|
if (fessConfig.getQueryReplaceTermWithPrefixQueryAsBoolean() && text.length() > 1 && text.endsWith("*")) {
|
|
if (fessConfig.getQueryReplaceTermWithPrefixQueryAsBoolean() && text.length() > 1 && text.endsWith("*")) {
|
|
return convertPrefixQuery(context, new PrefixQuery(new Term(field, text.substring(0, text.length() - 1))), boost);
|
|
return convertPrefixQuery(context, new PrefixQuery(new Term(field, text.substring(0, text.length() - 1))), boost);
|
|
@@ -562,8 +575,10 @@ public class QueryHelper {
|
|
}
|
|
}
|
|
context.addSorts(createFieldSortBuilder(sortField, sortOrder));
|
|
context.addSorts(createFieldSortBuilder(sortField, sortOrder));
|
|
return null;
|
|
return null;
|
|
- } else if (INURL_FIELD.equals(field)) {
|
|
|
|
|
|
+ } else if (INURL_FIELD.equals(field) || fessConfig.getIndexFieldUrl().equals(context.getDefaultField())) {
|
|
return QueryBuilders.wildcardQuery(fessConfig.getIndexFieldUrl(), "*" + text + "*").boost(boost);
|
|
return QueryBuilders.wildcardQuery(fessConfig.getIndexFieldUrl(), "*" + text + "*").boost(boost);
|
|
|
|
+ } else if (SITE_FIELD.equals(field)) {
|
|
|
|
+ return convertSiteQuery(context, text, boost);
|
|
} else if (isSearchField(field)) {
|
|
} else if (isSearchField(field)) {
|
|
context.addFieldLog(field, text);
|
|
context.addFieldLog(field, text);
|
|
context.addHighlightedQuery(text);
|
|
context.addHighlightedQuery(text);
|
|
@@ -580,6 +595,10 @@ public class QueryHelper {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ protected QueryBuilder convertSiteQuery(final QueryContext context, final String text, final float boost) {
|
|
|
|
+ return QueryBuilders.prefixQuery(fessConfig.getIndexFieldSite(), text).boost(boost);
|
|
|
|
+ }
|
|
|
|
+
|
|
private QueryBuilder convertPhraseQuery(final QueryContext context, final PhraseQuery query, final float boost) {
|
|
private QueryBuilder convertPhraseQuery(final QueryContext context, final PhraseQuery query, final float boost) {
|
|
final Term[] terms = query.getTerms();
|
|
final Term[] terms = query.getTerms();
|
|
if (terms.length == 0) {
|
|
if (terms.length == 0) {
|