fix #1752 add query.additional.default.fields

This commit is contained in:
Shinsuke Sugaya 2018-07-11 22:44:06 +09:00
parent fabaf6c53b
commit 0c4231a3ce
4 changed files with 82 additions and 6 deletions

View file

@ -50,6 +50,7 @@ import org.apache.lucene.search.TermRangeQuery;
import org.apache.lucene.search.WildcardQuery;
import org.apache.lucene.util.BytesRef;
import org.codelibs.core.lang.StringUtil;
import org.codelibs.core.misc.Pair;
import org.codelibs.fess.Constants;
import org.codelibs.fess.entity.FacetInfo;
import org.codelibs.fess.entity.GeoInfo;
@ -131,6 +132,8 @@ public class QueryHelper {
protected List<QueryRescorer> queryRescorerList = new ArrayList<>();
protected List<Pair<String, Float>> additionalDefaultList = new ArrayList<>();
@PostConstruct
public void init() {
final FessConfig fessConfig = ComponentUtil.getFessConfig();
@ -311,6 +314,20 @@ public class QueryHelper {
}
split(fessConfig.getQueryAdditionalAnalyzedFields(), ",").of(
stream -> stream.map(s -> s.trim()).filter(StringUtil::isNotBlank).forEach(s -> notAnalyzedFieldSet.remove(s)));
split(fessConfig.getQueryAdditionalDefaultFields(), ",").of(stream -> stream.filter(StringUtil::isNotBlank).map(s -> {
final Pair<String, Float> pair = new Pair<>();
final String[] values = s.split(":");
if (values.length == 1) {
pair.setFirst(values[0].trim());
pair.setSecond(1.0f);
} else if (values.length > 1) {
pair.setFirst(values[0]);
pair.setSecond(Float.parseFloat(values[1]));
} else {
return null;
}
return pair;
}).forEach(additionalDefaultList::add));
}
public QueryContext build(final SearchRequestType searchRequestType, final String query, final Consumer<QueryContext> context) {
@ -626,7 +643,7 @@ public class QueryHelper {
return QueryBuilders.prefixQuery(ComponentUtil.getFessConfig().getIndexFieldSite(), text).boost(boost);
}
private QueryBuilder convertPhraseQuery(final QueryContext context, final PhraseQuery query, final float boost) {
protected QueryBuilder convertPhraseQuery(final QueryContext context, final PhraseQuery query, final float boost) {
final Term[] terms = query.getTerms();
if (terms.length == 0) {
throw new InvalidQueryException(messages -> messages.addErrorsInvalidQueryUnknown(UserMessages.GLOBAL_PROPERTY_KEY),
@ -640,7 +657,7 @@ public class QueryHelper {
return buildDefaultQueryBuilder((f, b) -> buildMatchPhraseQuery(f, text).boost(b * boost));
}
private boolean isSearchField(final String field) {
protected boolean isSearchField(final String field) {
for (final String searchField : searchFields) {
if (searchField.equals(field)) {
return true;
@ -649,7 +666,7 @@ public class QueryHelper {
return false;
}
private QueryBuilder buildDefaultQueryBuilder(final DefaultQueryBuilderFunction builder) {
protected QueryBuilder buildDefaultQueryBuilder(final DefaultQueryBuilderFunction builder) {
final BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
final FessConfig fessConfig = ComponentUtil.getFessConfig();
final QueryBuilder titleQuery =
@ -670,6 +687,10 @@ public class QueryHelper {
.getQueryBoostContentLangAsDecimal().floatValue());
boolQuery.should(contentLangQuery);
})));
additionalDefaultList.stream().forEach(f -> {
final QueryBuilder query = builder.apply(f.getFirst(), f.getSecond());
boolQuery.should(query);
});
return boolQuery;
}
@ -683,7 +704,7 @@ public class QueryHelper {
(String[]) request.getAttribute(Constants.REQUEST_LANGUAGES)));
}
private boolean isSortField(final String field) {
protected boolean isSortField(final String field) {
for (final String f : sortFields) {
if (f.equals(field)) {
return true;

View file

@ -566,6 +566,9 @@ public class FessLabels extends UserMessages {
/** The key of the message: Job Log */
public static final String LABELS_menu_jobLog = "{labels.menu_jobLog}";
/** The key of the message: Search Log */
public static final String LABELS_menu_searchLog = "{labels.menu_searchLog}";
/** The key of the message: Failure URL */
public static final String LABELS_menu_failure_url = "{labels.menu_failure_url}";
@ -2517,10 +2520,10 @@ public class FessLabels extends UserMessages {
/** The key of the message: Destination Indicator */
public static final String LABELS_DESTINATION_INDICATOR = "{labels.destinationIndicator}";
/** The key of the message: Internationali SDNNumber */
/** The key of the message: International ISDN Number */
public static final String LABELS_user_internationaliSDNNumber = "{labels.user_internationaliSDNNumber}";
/** The key of the message: Internationali SDNNumber */
/** The key of the message: International ISDN Number */
public static final String LABELS_INTERNATIONALISDN_NUMBER = "{labels.internationaliSDNNumber}";
/** The key of the message: State */
@ -2757,6 +2760,30 @@ public class FessLabels extends UserMessages {
/** The key of the message: past year */
public static final String LABELS_advance_search_timestamp_pastyear = "{labels.advance_search_timestamp_pastyear}";
/** The key of the message: Search Log */
public static final String LABELS_searchlog_configuration = "{labels.searchlog_configuration}";
/** The key of the message: Search Log */
public static final String LABELS_searchlog_title = "{labels.searchlog_title}";
/** The key of the message: Log Type */
public static final String LABELS_searchlog_log_type = "{labels.searchlog_log_type}";
/** The key of the message: Search Log */
public static final String LABELS_searchlog_log_type_search = "{labels.searchlog_log_type_search}";
/** The key of the message: Click Log */
public static final String LABELS_searchlog_log_type_click = "{labels.searchlog_log_type_click}";
/** The key of the message: Favorite Log */
public static final String LABELS_searchlog_log_type_favorite = "{labels.searchlog_log_type_favorite}";
/** The key of the message: Message */
public static final String LABELS_searchlog_log_message = "{labels.searchlog_log_message}";
/** The key of the message: Time */
public static final String LABELS_searchlog_requested_time = "{labels.searchlog_requested_time}";
/**
* Assert the property is not null.
* @param property The value of the property. (NotNull)

View file

@ -602,6 +602,9 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
/** The key of the configuration. e.g. 100000 */
String QUERY_MAX_SEARCH_RESULT_OFFSET = "query.max.search.result.offset";
/** The key of the configuration. e.g. */
String QUERY_ADDITIONAL_DEFAULT_FIELDS = "query.additional.default.fields";
/** The key of the configuration. e.g. */
String QUERY_ADDITIONAL_RESPONSE_FIELDS = "query.additional.response.fields";
@ -3145,6 +3148,21 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
*/
Integer getQueryMaxSearchResultOffsetAsInteger();
/**
* Get the value for the key 'query.additional.default.fields'. <br>
* The value is, e.g. <br>
* @return The value of found property. (NotNull: if not found, exception but basically no way)
*/
String getQueryAdditionalDefaultFields();
/**
* Get the value for the key 'query.additional.default.fields' as {@link Integer}. <br>
* The value is, e.g. <br>
* @return The value of found property. (NotNull: if not found, exception but basically no way)
* @throws NumberFormatException When the property is not integer.
*/
Integer getQueryAdditionalDefaultFieldsAsInteger();
/**
* Get the value for the key 'query.additional.response.fields'. <br>
* The value is, e.g. <br>
@ -6791,6 +6809,14 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
return getAsInteger(FessConfig.QUERY_MAX_SEARCH_RESULT_OFFSET);
}
public String getQueryAdditionalDefaultFields() {
return get(FessConfig.QUERY_ADDITIONAL_DEFAULT_FIELDS);
}
public Integer getQueryAdditionalDefaultFieldsAsInteger() {
return getAsInteger(FessConfig.QUERY_ADDITIONAL_DEFAULT_FIELDS);
}
public String getQueryAdditionalResponseFields() {
return get(FessConfig.QUERY_ADDITIONAL_RESPONSE_FIELDS);
}
@ -8428,6 +8454,7 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
defaultMap.put(FessConfig.QUERY_HIGHLIGHT_TAG_POST, "</strong>");
defaultMap.put(FessConfig.QUERY_HIGHLIGHT_CONTENT_DESCRIPTION_FIELDS, "hl_content,digest");
defaultMap.put(FessConfig.QUERY_MAX_SEARCH_RESULT_OFFSET, "100000");
defaultMap.put(FessConfig.QUERY_ADDITIONAL_DEFAULT_FIELDS, "");
defaultMap.put(FessConfig.QUERY_ADDITIONAL_RESPONSE_FIELDS, "");
defaultMap.put(FessConfig.QUERY_ADDITIONAL_API_RESPONSE_FIELDS, "");
defaultMap.put(FessConfig.QUERY_ADDITIONAL_SCROLL_RESPONSE_FIELDS, "");

View file

@ -301,6 +301,7 @@ query.highlight.tag.pre=<strong>
query.highlight.tag.post=</strong>
query.highlight.content.description.fields=hl_content,digest
query.max.search.result.offset=100000
query.additional.default.fields=
query.additional.response.fields=
query.additional.api.response.fields=
query.additional.scroll.response.fields=