Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ gradle-app.setting
# JDT-specific (Eclipse Java Development Tools)
.classpath

# Intellij files
.idea/

# Compiled class file
*.class
Expand Down Expand Up @@ -86,4 +88,4 @@ Icon
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
.apdisk
Original file line number Diff line number Diff line change
Expand Up @@ -251,8 +251,8 @@ public void onResponse(final Response response) {
logger.info("Re-ranking overhead time: {}ms",
tookInMillis - searchResponse.getTook().getMillis());
} catch (final Exception e) {
logger.error("Failed to parse search response.", e);
throw new OpenSearchException("Failed to parse a search response.", e);
logger.error("Result transformer operations failed.", e);
throw new OpenSearchException("Result transformer operations failed.", e);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,25 @@
public class QueryParser {
private static final Logger logger = LogManager.getLogger(QueryParser.class);

private static final String BODY_FIELD_REQUIRED_ERROR_MESSAGE =
"Property [" + BODY_FIELD + "] must be specified";
private static final String FILED_MISMATCH_ERROR_MESSAGE =
"Mismatch: Field configured in %s property [%s] is not present in query fields [%s]. Will not apply Kendra Intelligent Ranking.";
private static final String QUERY_PARSER_RESULT_LOG =
"Kendra Intelligent Ranker query parser fields for query type [%s]: bodyField: %s, titleField: %s";
private static final String QUERY_PARSER_RESULT_LOG_WITHOUT_TITLE =
"Kendra Intelligent Ranker query parser fields for query type [%s]: bodyField: %s";

public QueryParserResult parse(
final QueryBuilder query,
final List<String> bodyFieldSetting,
final List<String> titleFieldSetting) {
final String bodyFieldFromSetting = bodyFieldSetting.isEmpty() ? null : bodyFieldSetting.get(0);
final String titleFieldFromSetting = titleFieldSetting.isEmpty() ? null : titleFieldSetting.get(0);
if (bodyFieldSetting == null || bodyFieldSetting.isEmpty()) {
throw new IllegalArgumentException(BODY_FIELD_REQUIRED_ERROR_MESSAGE);
}

final String bodyFieldFromSetting = bodyFieldSetting.get(0);
final String titleFieldFromSetting = (titleFieldSetting == null || titleFieldSetting.isEmpty()) ? null : titleFieldSetting.get(0);
QueryParserResult result = null;

if (query instanceof MatchQueryBuilder) {
Expand All @@ -51,6 +61,8 @@ private QueryParserResult parseMatchQuery(MatchQueryBuilder matchQuery, String b
bodyFieldFromSetting, matchQuery.fieldName()));
} else {
result = new QueryParserResult(matchQuery.value().toString(), bodyFieldFromSetting);
logger.info(String.format(Locale.ENGLISH, QUERY_PARSER_RESULT_LOG_WITHOUT_TITLE,
matchQuery.NAME, result.bodyFieldName));
}
return result;
}
Expand All @@ -76,6 +88,8 @@ private QueryParserResult parseMultiMatchQuery(MultiMatchQueryBuilder multiMatch
} else {
final String titleFieldToUse = configuredTitleFieldPresentInQuery ? titleFieldFromSetting : null;
result = new QueryParserResult(multiMatchQuery.value().toString(), bodyFieldFromSetting, titleFieldToUse);
logger.info(String.format(Locale.ENGLISH, QUERY_PARSER_RESULT_LOG,
multiMatchQuery.NAME, result.bodyFieldName, result.titleFieldName));
}
return result;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,14 @@ public class QueryParserTests extends OpenSearchTestCase {
private static final String INVALID_FIELD = "invalidField";
private QueryParser queryParser = new QueryParser();

public void testParse_BodyFieldNull_ThrowsException() {
assertThrows(IllegalArgumentException.class, () -> queryParser.parse(
new MatchQueryBuilder(TEST_BODY_FIELD, TEST_QUERY_TEXT),
null,
null)
);
}

public void testParse_Match_RequestFieldMatchesSetting() {
QueryParser.QueryParserResult queryParserResult = queryParser.parse(
new MatchQueryBuilder(TEST_BODY_FIELD, TEST_QUERY_TEXT),
Expand All @@ -33,6 +41,15 @@ public void testParse_Match_RequestFieldMatchesSetting() {
performQueryParserResultAssertions(queryParserResult, TEST_QUERY_TEXT, TEST_BODY_FIELD, null);
}

public void testParse_Match_TitleFieldSettingNull() {
QueryParser.QueryParserResult queryParserResult = queryParser.parse(
new MatchQueryBuilder(TEST_BODY_FIELD, TEST_QUERY_TEXT),
Arrays.asList(TEST_BODY_FIELD),
null);

performQueryParserResultAssertions(queryParserResult, TEST_QUERY_TEXT, TEST_BODY_FIELD, null);
}

public void testParse_Match_RequestFieldDoesNotMatchSetting() {
QueryParser.QueryParserResult queryParserResult = queryParser.parse(
new MatchQueryBuilder(TEST_BODY_FIELD, TEST_QUERY_TEXT),
Expand Down Expand Up @@ -60,6 +77,15 @@ public void testParse_MultiMatch_OnlyBodyFieldMatchesSetting() {
performQueryParserResultAssertions(queryParserResult, TEST_QUERY_TEXT, TEST_BODY_FIELD, null);
}

public void testParse_MultiMatch_TitleFieldSettingNull() {
QueryParser.QueryParserResult queryParserResult = queryParser.parse(
new MultiMatchQueryBuilder(TEST_QUERY_TEXT, TEST_BODY_FIELD, TEST_TITLE_FIELD),
Arrays.asList(TEST_BODY_FIELD),
null);

performQueryParserResultAssertions(queryParserResult, TEST_QUERY_TEXT, TEST_BODY_FIELD, null);
}

public void testParse_MultiMatch_RequestFieldMatchesSetting_WithFieldBoosting() {
MultiMatchQueryBuilder multiMatchQueryBuilder = new MultiMatchQueryBuilder(TEST_QUERY_TEXT, TEST_TITLE_FIELD, TEST_BODY_FIELD);
multiMatchQueryBuilder.field(TEST_BODY_FIELD, 1.5f);
Expand Down