|
|
@@ -41,6 +41,8 @@ import org.elasticsearch.search.collapse.CollapseBuilder;
|
|
|
import org.elasticsearch.search.collapse.CollapseBuilderTests;
|
|
|
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
|
|
|
import org.elasticsearch.search.rescore.QueryRescorerBuilder;
|
|
|
+import org.elasticsearch.search.retriever.KnnRetrieverBuilder;
|
|
|
+import org.elasticsearch.search.retriever.StandardRetrieverBuilder;
|
|
|
import org.elasticsearch.search.slice.SliceBuilder;
|
|
|
import org.elasticsearch.search.sort.FieldSortBuilder;
|
|
|
import org.elasticsearch.search.sort.ScoreSortBuilder;
|
|
|
@@ -600,6 +602,75 @@ public class SearchSourceBuilderTests extends AbstractSearchTestCase {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public void testStandardRetrieverParsing() throws IOException {
|
|
|
+ String restContent = "{"
|
|
|
+ + " \"retriever\": {"
|
|
|
+ + " \"standard\": {"
|
|
|
+ + " \"query\": {"
|
|
|
+ + " \"match_all\": {}"
|
|
|
+ + " },"
|
|
|
+ + " \"min_score\": 10,"
|
|
|
+ + " \"_name\": \"foo_standard\""
|
|
|
+ + " }"
|
|
|
+ + " }"
|
|
|
+ + "}";
|
|
|
+ SearchUsageHolder searchUsageHolder = new UsageService().getSearchUsageHolder();
|
|
|
+ try (XContentParser jsonParser = createParser(JsonXContent.jsonXContent, restContent)) {
|
|
|
+ SearchSourceBuilder source = new SearchSourceBuilder().parseXContent(jsonParser, true, searchUsageHolder, nf -> true);
|
|
|
+ assertThat(source.retriever(), instanceOf(StandardRetrieverBuilder.class));
|
|
|
+ StandardRetrieverBuilder parsed = (StandardRetrieverBuilder) source.retriever();
|
|
|
+ assertThat(parsed.minScore(), equalTo(10f));
|
|
|
+ assertThat(parsed.retrieverName(), equalTo("foo_standard"));
|
|
|
+ try (XContentParser parseSerialized = createParser(JsonXContent.jsonXContent, Strings.toString(source))) {
|
|
|
+ SearchSourceBuilder deserializedSource = new SearchSourceBuilder().parseXContent(
|
|
|
+ parseSerialized,
|
|
|
+ true,
|
|
|
+ searchUsageHolder,
|
|
|
+ nf -> true
|
|
|
+ );
|
|
|
+ assertThat(deserializedSource.retriever(), instanceOf(StandardRetrieverBuilder.class));
|
|
|
+ StandardRetrieverBuilder deserialized = (StandardRetrieverBuilder) source.retriever();
|
|
|
+ assertThat(parsed, equalTo(deserialized));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testKnnRetrieverParsing() throws IOException {
|
|
|
+ String restContent = "{"
|
|
|
+ + " \"retriever\": {"
|
|
|
+ + " \"knn\": {"
|
|
|
+ + " \"query_vector\": ["
|
|
|
+ + " 3"
|
|
|
+ + " ],"
|
|
|
+ + " \"field\": \"vector\","
|
|
|
+ + " \"k\": 10,"
|
|
|
+ + " \"num_candidates\": 15,"
|
|
|
+ + " \"min_score\": 10,"
|
|
|
+ + " \"_name\": \"foo_knn\""
|
|
|
+ + " }"
|
|
|
+ + " }"
|
|
|
+ + "}";
|
|
|
+ SearchUsageHolder searchUsageHolder = new UsageService().getSearchUsageHolder();
|
|
|
+ try (XContentParser jsonParser = createParser(JsonXContent.jsonXContent, restContent)) {
|
|
|
+ SearchSourceBuilder source = new SearchSourceBuilder().parseXContent(jsonParser, true, searchUsageHolder, nf -> true);
|
|
|
+ assertThat(source.retriever(), instanceOf(KnnRetrieverBuilder.class));
|
|
|
+ KnnRetrieverBuilder parsed = (KnnRetrieverBuilder) source.retriever();
|
|
|
+ assertThat(parsed.minScore(), equalTo(10f));
|
|
|
+ assertThat(parsed.retrieverName(), equalTo("foo_knn"));
|
|
|
+ try (XContentParser parseSerialized = createParser(JsonXContent.jsonXContent, Strings.toString(source))) {
|
|
|
+ SearchSourceBuilder deserializedSource = new SearchSourceBuilder().parseXContent(
|
|
|
+ parseSerialized,
|
|
|
+ true,
|
|
|
+ searchUsageHolder,
|
|
|
+ nf -> true
|
|
|
+ );
|
|
|
+ assertThat(deserializedSource.retriever(), instanceOf(KnnRetrieverBuilder.class));
|
|
|
+ KnnRetrieverBuilder deserialized = (KnnRetrieverBuilder) source.retriever();
|
|
|
+ assertThat(parsed, equalTo(deserialized));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
public void testStoredFieldsUsage() throws IOException {
|
|
|
Set<String> storedFieldRestVariations = Set.of(
|
|
|
"{\"stored_fields\" : [\"_none_\"]}",
|