fix #729 add query.additional.\*.fields

This commit is contained in:
Shinsuke Sugaya 2016-10-06 13:00:45 +09:00
parent ca7c93850d
commit 846f7d209e
4 changed files with 336 additions and 50 deletions

View file

@ -99,8 +99,6 @@ public class QueryHelper {
protected String[] cacheResponseFields;
protected String[] responseDocValuesFields;
protected String[] highlightedFields;
protected String[] searchFields;
@ -109,7 +107,7 @@ public class QueryHelper {
protected String sortPrefix = "sort:";
protected String[] supportedSortFields;
protected String[] sortFields;
protected int highlightFragmentSize = 100;
@ -138,7 +136,8 @@ public class QueryHelper {
@PostConstruct
public void init() {
if (responseFields == null) {
responseFields = new String[] { SCORE_FIELD, //
responseFields = fessConfig.getQueryAdditionalResponseFields(//
SCORE_FIELD, //
fessConfig.getIndexFieldId(), //
fessConfig.getIndexFieldDocId(), //
fessConfig.getIndexFieldBoost(), //
@ -158,10 +157,11 @@ public class QueryHelper {
fessConfig.getIndexFieldFavoriteCount(), //
fessConfig.getIndexFieldConfigId(), //
fessConfig.getIndexFieldLang(), //
fessConfig.getIndexFieldHasCache() };
fessConfig.getIndexFieldHasCache());
}
if (cacheResponseFields == null) {
cacheResponseFields = new String[] { SCORE_FIELD, //
cacheResponseFields = fessConfig.getQueryAdditionalCacheResponseFields(//
SCORE_FIELD, //
fessConfig.getIndexFieldId(), //
fessConfig.getIndexFieldDocId(), //
fessConfig.getIndexFieldBoost(), //
@ -181,18 +181,14 @@ public class QueryHelper {
fessConfig.getIndexFieldFavoriteCount(), //
fessConfig.getIndexFieldConfigId(), //
fessConfig.getIndexFieldLang(), //
fessConfig.getIndexFieldCache() };
}
if (responseDocValuesFields == null) {
responseDocValuesFields = new String[] {//
fessConfig.getIndexFieldClickCount(), //
fessConfig.getIndexFieldFavoriteCount() };
fessConfig.getIndexFieldCache());
}
if (highlightedFields == null) {
highlightedFields = new String[] { fessConfig.getIndexFieldContent() };
highlightedFields = fessConfig.getQueryAdditionalHighlightedFields(fessConfig.getIndexFieldContent());
}
if (searchFields == null) {
searchFields = new String[] { INURL_FIELD, //
searchFields = fessConfig.getQueryAdditionalSearchFields(//
INURL_FIELD, //
fessConfig.getIndexFieldUrl(), //
fessConfig.getIndexFieldDocId(), //
fessConfig.getIndexFieldHost(), //
@ -208,35 +204,36 @@ public class QueryHelper {
fessConfig.getIndexFieldSegment(), //
fessConfig.getIndexFieldClickCount(), //
fessConfig.getIndexFieldFavoriteCount(), //
fessConfig.getIndexFieldLang() };
fessConfig.getIndexFieldLang());
}
if (facetFields == null) {
facetFields = new String[] {//
facetFields = fessConfig.getQueryAdditionalFacetFields(//
fessConfig.getIndexFieldUrl(), //
fessConfig.getIndexFieldHost(), //
fessConfig.getIndexFieldTitle(), //
fessConfig.getIndexFieldContent(), //
fessConfig.getIndexFieldContentLength(), //
fessConfig.getIndexFieldLastModified(), //
fessConfig.getIndexFieldTimestamp(), //
fessConfig.getIndexFieldMimetype(), //
fessConfig.getIndexFieldFiletype(), //
fessConfig.getIndexFieldLabel(), //
fessConfig.getIndexFieldSegment() };
fessConfig.getIndexFieldHost(), //
fessConfig.getIndexFieldTitle(), //
fessConfig.getIndexFieldContent(), //
fessConfig.getIndexFieldContentLength(), //
fessConfig.getIndexFieldLastModified(), //
fessConfig.getIndexFieldTimestamp(), //
fessConfig.getIndexFieldMimetype(), //
fessConfig.getIndexFieldFiletype(), //
fessConfig.getIndexFieldLabel(), //
fessConfig.getIndexFieldSegment());
}
if (supportedSortFields == null) {
supportedSortFields = new String[] { SCORE_SORT_VALUE, //
if (sortFields == null) {
sortFields = fessConfig.getQueryAdditionalSortFields(//
SCORE_SORT_VALUE, //
fessConfig.getIndexFieldFilename(), //
fessConfig.getIndexFieldCreated(), //
fessConfig.getIndexFieldContentLength(), //
fessConfig.getIndexFieldLastModified(), //
fessConfig.getIndexFieldTimestamp(), //
fessConfig.getIndexFieldClickCount(), //
fessConfig.getIndexFieldFavoriteCount() };
fessConfig.getIndexFieldFavoriteCount());
}
if (apiResponseFieldSet == null) {
setApiResponseFields(new String[] {//
fessConfig.getResponseFieldContentDescription(), //
setApiResponseFields(fessConfig.getQueryAdditionalApiResponseFields(//
fessConfig.getResponseFieldContentDescription(), //
fessConfig.getResponseFieldContentTitle(), //
fessConfig.getResponseFieldSitePath(), //
fessConfig.getResponseFieldUrlLink(), //
@ -254,11 +251,11 @@ public class QueryHelper {
fessConfig.getIndexFieldCreated(), //
fessConfig.getIndexFieldTitle(), //
fessConfig.getIndexFieldDigest(), //
fessConfig.getIndexFieldUrl() });
fessConfig.getIndexFieldUrl()));
}
if (notAnalyzedFieldSet == null) {
setNotAnalyzedFields(new String[] {//
fessConfig.getIndexFieldAnchor(), //
setNotAnalyzedFields(fessConfig.getQueryAdditionalNotAnalyzedFields(//
fessConfig.getIndexFieldAnchor(), //
fessConfig.getIndexFieldBoost(), //
fessConfig.getIndexFieldClickCount(), //
fessConfig.getIndexFieldConfigId(), //
@ -282,7 +279,7 @@ public class QueryHelper {
fessConfig.getIndexFieldSite(), //
fessConfig.getIndexFieldTimestamp(), //
fessConfig.getIndexFieldUrl(), //
fessConfig.getIndexFieldVersion() });
fessConfig.getIndexFieldVersion()));
}
}
@ -603,7 +600,7 @@ public class QueryHelper {
}
private boolean isSortField(final String field) {
for (final String f : supportedSortFields) {
for (final String f : sortFields) {
if (f.equals(field)) {
return true;
}
@ -668,14 +665,6 @@ public class QueryHelper {
this.cacheResponseFields = cacheResponseFields;
}
public String[] getResponseDocValuesFields() {
return responseDocValuesFields;
}
public void setResponseDocValuesFields(final String[] responseDocValuesFields) {
this.responseDocValuesFields = responseDocValuesFields;
}
/**
* @return the highlightedFields
*/
@ -738,17 +727,17 @@ public class QueryHelper {
}
/**
* @return the supportedSortFields
* @return the sortFields
*/
public String[] getSupportedSortFields() {
return supportedSortFields;
public String[] getSortFields() {
return sortFields;
}
/**
* @param supportedSortFields the supportedSortFields to set
* @param sortFields the sortFields to set
*/
public void setSupportedSortFields(final String[] supportedSortFields) {
this.supportedSortFields = supportedSortFields;
public void setSortFields(final String[] supportedSortFields) {
this.sortFields = supportedSortFields;
}
public void addHighlightField(final String field) {

View file

@ -415,6 +415,30 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
/** The key of the configuration. e.g. true */
String QUERY_REPLACE_TERM_WITH_PREFIX_QUERY = "query.replace.term.with.prefix.query";
/** The key of the configuration. e.g. */
String QUERY_ADDITIONAL_RESPONSE_FIELDS = "query.additional.response.fields";
/** The key of the configuration. e.g. */
String QUERY_ADDITIONAL_API_RESPONSE_FIELDS = "query.additional.api.response.fields";
/** The key of the configuration. e.g. */
String QUERY_ADDITIONAL_CACHE_RESPONSE_FIELDS = "query.additional.cache.response.fields";
/** The key of the configuration. e.g. */
String QUERY_ADDITIONAL_HIGHLIGHTED_FIELDS = "query.additional.highlighted.fields";
/** The key of the configuration. e.g. */
String QUERY_ADDITIONAL_SEARCH_FIELDS = "query.additional.search.fields";
/** The key of the configuration. e.g. */
String QUERY_ADDITIONAL_FACET_FIELDS = "query.additional.facet.fields";
/** The key of the configuration. e.g. */
String QUERY_ADDITIONAL_SORT_FIELDS = "query.additional.sort.fields";
/** The key of the configuration. e.g. */
String QUERY_ADDITIONAL_NOT_ANALYZED_FIELDS = "query.additional.not.analyzed.fields";
/** The key of the configuration. e.g. */
String QUERY_DEFAULT_LANGUAGES = "query.default.languages";
@ -2206,6 +2230,126 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
*/
boolean isQueryReplaceTermWithPrefixQuery();
/**
* Get the value for the key 'query.additional.response.fields'. <br>
* The value is, e.g. <br>
* @return The value of found property. (NotNull: if not found, exception but basically no way)
*/
String getQueryAdditionalResponseFields();
/**
* Get the value for the key 'query.additional.response.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 getQueryAdditionalResponseFieldsAsInteger();
/**
* Get the value for the key 'query.additional.api.response.fields'. <br>
* The value is, e.g. <br>
* @return The value of found property. (NotNull: if not found, exception but basically no way)
*/
String getQueryAdditionalApiResponseFields();
/**
* Get the value for the key 'query.additional.api.response.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 getQueryAdditionalApiResponseFieldsAsInteger();
/**
* Get the value for the key 'query.additional.cache.response.fields'. <br>
* The value is, e.g. <br>
* @return The value of found property. (NotNull: if not found, exception but basically no way)
*/
String getQueryAdditionalCacheResponseFields();
/**
* Get the value for the key 'query.additional.cache.response.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 getQueryAdditionalCacheResponseFieldsAsInteger();
/**
* Get the value for the key 'query.additional.highlighted.fields'. <br>
* The value is, e.g. <br>
* @return The value of found property. (NotNull: if not found, exception but basically no way)
*/
String getQueryAdditionalHighlightedFields();
/**
* Get the value for the key 'query.additional.highlighted.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 getQueryAdditionalHighlightedFieldsAsInteger();
/**
* Get the value for the key 'query.additional.search.fields'. <br>
* The value is, e.g. <br>
* @return The value of found property. (NotNull: if not found, exception but basically no way)
*/
String getQueryAdditionalSearchFields();
/**
* Get the value for the key 'query.additional.search.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 getQueryAdditionalSearchFieldsAsInteger();
/**
* Get the value for the key 'query.additional.facet.fields'. <br>
* The value is, e.g. <br>
* @return The value of found property. (NotNull: if not found, exception but basically no way)
*/
String getQueryAdditionalFacetFields();
/**
* Get the value for the key 'query.additional.facet.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 getQueryAdditionalFacetFieldsAsInteger();
/**
* Get the value for the key 'query.additional.sort.fields'. <br>
* The value is, e.g. <br>
* @return The value of found property. (NotNull: if not found, exception but basically no way)
*/
String getQueryAdditionalSortFields();
/**
* Get the value for the key 'query.additional.sort.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 getQueryAdditionalSortFieldsAsInteger();
/**
* Get the value for the key 'query.additional.not.analyzed.fields'. <br>
* The value is, e.g. <br>
* @return The value of found property. (NotNull: if not found, exception but basically no way)
*/
String getQueryAdditionalNotAnalyzedFields();
/**
* Get the value for the key 'query.additional.not.analyzed.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 getQueryAdditionalNotAnalyzedFieldsAsInteger();
/**
* Get the value for the key 'query.default.languages'. <br>
* The value is, e.g. <br>
@ -4784,6 +4928,70 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
return is(FessConfig.QUERY_REPLACE_TERM_WITH_PREFIX_QUERY);
}
public String getQueryAdditionalResponseFields() {
return get(FessConfig.QUERY_ADDITIONAL_RESPONSE_FIELDS);
}
public Integer getQueryAdditionalResponseFieldsAsInteger() {
return getAsInteger(FessConfig.QUERY_ADDITIONAL_RESPONSE_FIELDS);
}
public String getQueryAdditionalApiResponseFields() {
return get(FessConfig.QUERY_ADDITIONAL_API_RESPONSE_FIELDS);
}
public Integer getQueryAdditionalApiResponseFieldsAsInteger() {
return getAsInteger(FessConfig.QUERY_ADDITIONAL_API_RESPONSE_FIELDS);
}
public String getQueryAdditionalCacheResponseFields() {
return get(FessConfig.QUERY_ADDITIONAL_CACHE_RESPONSE_FIELDS);
}
public Integer getQueryAdditionalCacheResponseFieldsAsInteger() {
return getAsInteger(FessConfig.QUERY_ADDITIONAL_CACHE_RESPONSE_FIELDS);
}
public String getQueryAdditionalHighlightedFields() {
return get(FessConfig.QUERY_ADDITIONAL_HIGHLIGHTED_FIELDS);
}
public Integer getQueryAdditionalHighlightedFieldsAsInteger() {
return getAsInteger(FessConfig.QUERY_ADDITIONAL_HIGHLIGHTED_FIELDS);
}
public String getQueryAdditionalSearchFields() {
return get(FessConfig.QUERY_ADDITIONAL_SEARCH_FIELDS);
}
public Integer getQueryAdditionalSearchFieldsAsInteger() {
return getAsInteger(FessConfig.QUERY_ADDITIONAL_SEARCH_FIELDS);
}
public String getQueryAdditionalFacetFields() {
return get(FessConfig.QUERY_ADDITIONAL_FACET_FIELDS);
}
public Integer getQueryAdditionalFacetFieldsAsInteger() {
return getAsInteger(FessConfig.QUERY_ADDITIONAL_FACET_FIELDS);
}
public String getQueryAdditionalSortFields() {
return get(FessConfig.QUERY_ADDITIONAL_SORT_FIELDS);
}
public Integer getQueryAdditionalSortFieldsAsInteger() {
return getAsInteger(FessConfig.QUERY_ADDITIONAL_SORT_FIELDS);
}
public String getQueryAdditionalNotAnalyzedFields() {
return get(FessConfig.QUERY_ADDITIONAL_NOT_ANALYZED_FIELDS);
}
public Integer getQueryAdditionalNotAnalyzedFieldsAsInteger() {
return getAsInteger(FessConfig.QUERY_ADDITIONAL_NOT_ANALYZED_FIELDS);
}
public String getQueryDefaultLanguages() {
return get(FessConfig.QUERY_DEFAULT_LANGUAGES);
}

View file

@ -18,6 +18,7 @@ package org.codelibs.fess.mylasta.direction;
import static org.codelibs.core.stream.StreamUtil.split;
import static org.codelibs.core.stream.StreamUtil.stream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.Enumeration;
@ -1322,4 +1323,84 @@ public interface FessProp {
}
return spaceChars;
}
String getQueryAdditionalResponseFields();
public default String[] getQueryAdditionalResponseFields(String... fields) {
final List<String> list = new ArrayList<>(fields.length + 10);
stream(fields).of(stream -> stream.forEach(list::add));
split(getQueryAdditionalResponseFields(), ",").of(
stream -> stream.filter(StringUtil::isNotBlank).map(s -> s.trim()).forEach(list::add));
return list.toArray(new String[list.size()]);
}
String getQueryAdditionalCacheResponseFields();
public default String[] getQueryAdditionalCacheResponseFields(String... fields) {
final List<String> list = new ArrayList<>(fields.length + 10);
stream(fields).of(stream -> stream.forEach(list::add));
split(getQueryAdditionalCacheResponseFields(), ",").of(
stream -> stream.filter(StringUtil::isNotBlank).map(s -> s.trim()).forEach(list::add));
return list.toArray(new String[list.size()]);
}
String getQueryAdditionalHighlightedFields();
public default String[] getQueryAdditionalHighlightedFields(String... fields) {
final List<String> list = new ArrayList<>(fields.length + 10);
stream(fields).of(stream -> stream.forEach(list::add));
split(getQueryAdditionalHighlightedFields(), ",").of(
stream -> stream.filter(StringUtil::isNotBlank).map(s -> s.trim()).forEach(list::add));
return list.toArray(new String[list.size()]);
}
String getQueryAdditionalSearchFields();
public default String[] getQueryAdditionalSearchFields(String... fields) {
final List<String> list = new ArrayList<>(fields.length + 10);
stream(fields).of(stream -> stream.forEach(list::add));
split(getQueryAdditionalSearchFields(), ",").of(
stream -> stream.filter(StringUtil::isNotBlank).map(s -> s.trim()).forEach(list::add));
return list.toArray(new String[list.size()]);
}
String getQueryAdditionalFacetFields();
public default String[] getQueryAdditionalFacetFields(String... fields) {
final List<String> list = new ArrayList<>(fields.length + 10);
stream(fields).of(stream -> stream.forEach(list::add));
split(getQueryAdditionalFacetFields(), ",").of(
stream -> stream.filter(StringUtil::isNotBlank).map(s -> s.trim()).forEach(list::add));
return list.toArray(new String[list.size()]);
}
String getQueryAdditionalSortFields();
public default String[] getQueryAdditionalSortFields(String... fields) {
final List<String> list = new ArrayList<>(fields.length + 10);
stream(fields).of(stream -> stream.forEach(list::add));
split(getQueryAdditionalSortFields(), ",")
.of(stream -> stream.filter(StringUtil::isNotBlank).map(s -> s.trim()).forEach(list::add));
return list.toArray(new String[list.size()]);
}
String getQueryAdditionalApiResponseFields();
public default String[] getQueryAdditionalApiResponseFields(String... fields) {
final List<String> list = new ArrayList<>(fields.length + 10);
stream(fields).of(stream -> stream.forEach(list::add));
split(getQueryAdditionalApiResponseFields(), ",").of(
stream -> stream.filter(StringUtil::isNotBlank).map(s -> s.trim()).forEach(list::add));
return list.toArray(new String[list.size()]);
}
String getQueryAdditionalNotAnalyzedFields();
public default String[] getQueryAdditionalNotAnalyzedFields(String... fields) {
final List<String> list = new ArrayList<>(fields.length + 10);
stream(fields).of(stream -> stream.forEach(list::add));
split(getQueryAdditionalNotAnalyzedFields(), ",").of(
stream -> stream.filter(StringUtil::isNotBlank).map(s -> s.trim()).forEach(list::add));
return list.toArray(new String[list.size()]);
}
}

View file

@ -197,6 +197,14 @@ index.indices.timeout=1m
query.max.length=1000
query.geo.fields=location
query.replace.term.with.prefix.query=true
query.additional.response.fields=
query.additional.api.response.fields=
query.additional.cache.response.fields=
query.additional.highlighted.fields=
query.additional.search.fields=
query.additional.facet.fields=
query.additional.sort.fields=
query.additional.not.analyzed.fields=
query.default.languages=
query.language.mapping=\
ar=ar\n\