fix #2512 add prefix_length and transpositions

This commit is contained in:
Shinsuke Sugaya 2020-12-31 06:44:32 +09:00
parent 144de1202c
commit e2f69f864f
3 changed files with 116 additions and 1 deletions

View file

@ -687,12 +687,17 @@ public class QueryHelper {
protected QueryBuilder buildDefaultTermQueryBuilder(final float boost, final String text) {
final BoolQueryBuilder boolQuery = buildDefaultQueryBuilder((f, b) -> buildMatchPhraseQuery(f, text).boost(b * boost));
final FessConfig fessConfig = ComponentUtil.getFessConfig();
if (text.length() >= fessConfig.getQueryBoostFuzzyMinLengthAsInteger()) {
final Integer fuzzyMinLength = fessConfig.getQueryBoostFuzzyMinLengthAsInteger();
if (fuzzyMinLength >= 0 && text.length() >= fuzzyMinLength) {
boolQuery.should(QueryBuilders.fuzzyQuery(fessConfig.getIndexFieldTitle(), text)
.boost(fessConfig.getQueryBoostFuzzyTitleAsDecimal().floatValue())
.prefixLength(fessConfig.getQueryBoostFuzzyTitlePrefixLengthAsInteger())
.transpositions(Constants.TRUE.equalsIgnoreCase(fessConfig.getQueryBoostFuzzyTitleTranspositions()))
.fuzziness(Fuzziness.build(fessConfig.getQueryBoostFuzzyTitleFuzziness()))
.maxExpansions(fessConfig.getQueryBoostFuzzyTitleExpansionsAsInteger()));
boolQuery.should(QueryBuilders.fuzzyQuery(fessConfig.getIndexFieldContent(), text)
.prefixLength(fessConfig.getQueryBoostFuzzyContentPrefixLengthAsInteger())
.transpositions(Constants.TRUE.equalsIgnoreCase(fessConfig.getQueryBoostFuzzyContentTranspositions()))
.boost(fessConfig.getQueryBoostFuzzyContentAsDecimal().floatValue())
.fuzziness(Fuzziness.build(fessConfig.getQueryBoostFuzzyContentFuzziness()))
.maxExpansions(fessConfig.getQueryBoostFuzzyContentExpansionsAsInteger()));

View file

@ -959,6 +959,12 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
/** The key of the configuration. e.g. 10 */
String QUERY_BOOST_FUZZY_TITLE_EXPANSIONS = "query.boost.fuzzy.title.expansions";
/** The key of the configuration. e.g. 0 */
String QUERY_BOOST_FUZZY_TITLE_prefix_length = "query.boost.fuzzy.title.prefix_length";
/** The key of the configuration. e.g. true */
String QUERY_BOOST_FUZZY_TITLE_TRANSPOSITIONS = "query.boost.fuzzy.title.transpositions";
/** The key of the configuration. e.g. 0.005 */
String QUERY_BOOST_FUZZY_CONTENT = "query.boost.fuzzy.content";
@ -968,6 +974,12 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
/** The key of the configuration. e.g. 10 */
String QUERY_BOOST_FUZZY_CONTENT_EXPANSIONS = "query.boost.fuzzy.content.expansions";
/** The key of the configuration. e.g. 0 */
String QUERY_BOOST_FUZZY_CONTENT_prefix_length = "query.boost.fuzzy.content.prefix_length";
/** The key of the configuration. e.g. true */
String QUERY_BOOST_FUZZY_CONTENT_TRANSPOSITIONS = "query.boost.fuzzy.content.transpositions";
/** The key of the configuration. e.g. label */
String QUERY_FACET_FIELDS = "query.facet.fields";
@ -4443,6 +4455,35 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
*/
Integer getQueryBoostFuzzyTitleExpansionsAsInteger();
/**
* Get the value for the key 'query.boost.fuzzy.title.prefix_length'. <br>
* The value is, e.g. 0 <br>
* @return The value of found property. (NotNull: if not found, exception but basically no way)
*/
String getQueryBoostFuzzyTitlePrefixLength();
/**
* Get the value for the key 'query.boost.fuzzy.title.prefix_length' as {@link Integer}. <br>
* The value is, e.g. 0 <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 getQueryBoostFuzzyTitlePrefixLengthAsInteger();
/**
* Get the value for the key 'query.boost.fuzzy.title.transpositions'. <br>
* The value is, e.g. true <br>
* @return The value of found property. (NotNull: if not found, exception but basically no way)
*/
String getQueryBoostFuzzyTitleTranspositions();
/**
* Is the property for the key 'query.boost.fuzzy.title.transpositions' true? <br>
* The value is, e.g. true <br>
* @return The determination, true or false. (if not found, exception but basically no way)
*/
boolean isQueryBoostFuzzyTitleTranspositions();
/**
* Get the value for the key 'query.boost.fuzzy.content'. <br>
* The value is, e.g. 0.005 <br>
@ -4480,6 +4521,35 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
*/
Integer getQueryBoostFuzzyContentExpansionsAsInteger();
/**
* Get the value for the key 'query.boost.fuzzy.content.prefix_length'. <br>
* The value is, e.g. 0 <br>
* @return The value of found property. (NotNull: if not found, exception but basically no way)
*/
String getQueryBoostFuzzyContentPrefixLength();
/**
* Get the value for the key 'query.boost.fuzzy.content.prefix_length' as {@link Integer}. <br>
* The value is, e.g. 0 <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 getQueryBoostFuzzyContentPrefixLengthAsInteger();
/**
* Get the value for the key 'query.boost.fuzzy.content.transpositions'. <br>
* The value is, e.g. true <br>
* @return The value of found property. (NotNull: if not found, exception but basically no way)
*/
String getQueryBoostFuzzyContentTranspositions();
/**
* Is the property for the key 'query.boost.fuzzy.content.transpositions' true? <br>
* The value is, e.g. true <br>
* @return The determination, true or false. (if not found, exception but basically no way)
*/
boolean isQueryBoostFuzzyContentTranspositions();
/**
* Get the value for the key 'query.facet.fields'. <br>
* The value is, e.g. label <br>
@ -8208,6 +8278,22 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
return getAsInteger(FessConfig.QUERY_BOOST_FUZZY_TITLE_EXPANSIONS);
}
public String getQueryBoostFuzzyTitlePrefixLength() {
return get(FessConfig.QUERY_BOOST_FUZZY_TITLE_prefix_length);
}
public Integer getQueryBoostFuzzyTitlePrefixLengthAsInteger() {
return getAsInteger(FessConfig.QUERY_BOOST_FUZZY_TITLE_prefix_length);
}
public String getQueryBoostFuzzyTitleTranspositions() {
return get(FessConfig.QUERY_BOOST_FUZZY_TITLE_TRANSPOSITIONS);
}
public boolean isQueryBoostFuzzyTitleTranspositions() {
return is(FessConfig.QUERY_BOOST_FUZZY_TITLE_TRANSPOSITIONS);
}
public String getQueryBoostFuzzyContent() {
return get(FessConfig.QUERY_BOOST_FUZZY_CONTENT);
}
@ -8228,6 +8314,22 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
return getAsInteger(FessConfig.QUERY_BOOST_FUZZY_CONTENT_EXPANSIONS);
}
public String getQueryBoostFuzzyContentPrefixLength() {
return get(FessConfig.QUERY_BOOST_FUZZY_CONTENT_prefix_length);
}
public Integer getQueryBoostFuzzyContentPrefixLengthAsInteger() {
return getAsInteger(FessConfig.QUERY_BOOST_FUZZY_CONTENT_prefix_length);
}
public String getQueryBoostFuzzyContentTranspositions() {
return get(FessConfig.QUERY_BOOST_FUZZY_CONTENT_TRANSPOSITIONS);
}
public boolean isQueryBoostFuzzyContentTranspositions() {
return is(FessConfig.QUERY_BOOST_FUZZY_CONTENT_TRANSPOSITIONS);
}
public String getQueryFacetFields() {
return get(FessConfig.QUERY_FACET_FIELDS);
}
@ -9740,9 +9842,13 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
defaultMap.put(FessConfig.QUERY_BOOST_FUZZY_TITLE, "0.01");
defaultMap.put(FessConfig.QUERY_BOOST_FUZZY_TITLE_FUZZINESS, "AUTO");
defaultMap.put(FessConfig.QUERY_BOOST_FUZZY_TITLE_EXPANSIONS, "10");
defaultMap.put(FessConfig.QUERY_BOOST_FUZZY_TITLE_prefix_length, "0");
defaultMap.put(FessConfig.QUERY_BOOST_FUZZY_TITLE_TRANSPOSITIONS, "true");
defaultMap.put(FessConfig.QUERY_BOOST_FUZZY_CONTENT, "0.005");
defaultMap.put(FessConfig.QUERY_BOOST_FUZZY_CONTENT_FUZZINESS, "AUTO");
defaultMap.put(FessConfig.QUERY_BOOST_FUZZY_CONTENT_EXPANSIONS, "10");
defaultMap.put(FessConfig.QUERY_BOOST_FUZZY_CONTENT_prefix_length, "0");
defaultMap.put(FessConfig.QUERY_BOOST_FUZZY_CONTENT_TRANSPOSITIONS, "true");
defaultMap.put(FessConfig.QUERY_FACET_FIELDS, "label");
defaultMap.put(FessConfig.QUERY_FACET_FIELDS_SIZE, "100");
defaultMap.put(FessConfig.QUERY_FACET_FIELDS_min_doc_count, "1");

View file

@ -517,9 +517,13 @@ query.boost.fuzzy.min.length=4
query.boost.fuzzy.title=0.01
query.boost.fuzzy.title.fuzziness=AUTO
query.boost.fuzzy.title.expansions=10
query.boost.fuzzy.title.prefix_length=0
query.boost.fuzzy.title.transpositions=true
query.boost.fuzzy.content=0.005
query.boost.fuzzy.content.fuzziness=AUTO
query.boost.fuzzy.content.expansions=10
query.boost.fuzzy.content.prefix_length=0
query.boost.fuzzy.content.transpositions=true
# facet
query.facet.fields=label