|
@@ -246,156 +246,6 @@ public class CompletionSuggestSearchIT extends ESIntegTestCase {
|
|
|
assertSuggestions("foo", fuzzyPrefix, outputs);
|
|
|
}
|
|
|
|
|
|
- public void testSuggestWithNumericPayload() throws Exception {
|
|
|
- final CompletionMappingBuilder mapping = new CompletionMappingBuilder();
|
|
|
- createIndexAndMapping(mapping);
|
|
|
- int numDocs = 10;
|
|
|
- List<IndexRequestBuilder> indexRequestBuilders = new ArrayList<>();
|
|
|
- for (int i = 0; i < numDocs; i++) {
|
|
|
- XContentBuilder source= jsonBuilder()
|
|
|
- .startObject()
|
|
|
- .field(FIELD, "suggestion" + i)
|
|
|
- .field("count", i)
|
|
|
- .endObject();
|
|
|
- indexRequestBuilders.add(client().prepareIndex(INDEX, TYPE, "" + i).setSource(source));
|
|
|
- }
|
|
|
- indexRandom(true, indexRequestBuilders);
|
|
|
-
|
|
|
- CompletionSuggestionBuilder prefix = SuggestBuilders.completionSuggestion(FIELD).prefix("sugg").
|
|
|
- size(numDocs).payload(Collections.singletonList("count"));
|
|
|
- SearchResponse searchResponse = client().prepareSearch(INDEX).suggest(new SuggestBuilder().addSuggestion("foo", prefix))
|
|
|
- .execute().actionGet();
|
|
|
- assertNoFailures(searchResponse);
|
|
|
- CompletionSuggestion completionSuggestion = searchResponse.getSuggest().getSuggestion("foo");
|
|
|
- CompletionSuggestion.Entry options = completionSuggestion.getEntries().get(0);
|
|
|
- assertThat(options.getOptions().size(), equalTo(numDocs));
|
|
|
- for (CompletionSuggestion.Entry.Option option : options) {
|
|
|
- Map<String, List<Object>> payloads = option.getPayload();
|
|
|
- assertThat(payloads.keySet(), contains("count"));
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void testMissingPayloadField() throws Exception {
|
|
|
- final CompletionMappingBuilder mapping = new CompletionMappingBuilder();
|
|
|
- createIndexAndMapping(mapping);
|
|
|
- List<IndexRequestBuilder> indexRequestBuilders = Arrays.asList(
|
|
|
- client().prepareIndex(INDEX, TYPE, "1").setSource(FIELD, "suggestion", "test_field", "test"),
|
|
|
- client().prepareIndex(INDEX, TYPE, "2").setSource(FIELD, "suggestion")
|
|
|
- );
|
|
|
- indexRandom(true, indexRequestBuilders);
|
|
|
- CompletionSuggestionBuilder prefix = SuggestBuilders.completionSuggestion(FIELD).prefix("sugg")
|
|
|
- .payload(Collections.singletonList("test_field"));
|
|
|
- SearchResponse searchResponse = client().prepareSearch(INDEX).suggest(new SuggestBuilder().addSuggestion("foo", prefix))
|
|
|
- .execute().actionGet();
|
|
|
- assertNoFailures(searchResponse);
|
|
|
- CompletionSuggestion completionSuggestion = searchResponse.getSuggest().getSuggestion("foo");
|
|
|
- CompletionSuggestion.Entry options = completionSuggestion.getEntries().get(0);
|
|
|
- assertThat(options.getOptions().size(), equalTo(2));
|
|
|
- for (CompletionSuggestion.Entry.Option option : options.getOptions()) {
|
|
|
- assertThat(option.getPayload().keySet(), contains("test_field"));
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void testPayload() throws Exception {
|
|
|
- final CompletionMappingBuilder mapping = new CompletionMappingBuilder();
|
|
|
- createIndexAndMapping(mapping);
|
|
|
- List<IndexRequestBuilder> indexRequestBuilders = new ArrayList<>();
|
|
|
- XContentBuilder source = jsonBuilder()
|
|
|
- .startObject()
|
|
|
- .startObject(FIELD)
|
|
|
- .field("input", "suggest")
|
|
|
- .field("weight", 1)
|
|
|
- .endObject()
|
|
|
- .field("title", "title1")
|
|
|
- .field("count", 1)
|
|
|
- .endObject();
|
|
|
- indexRequestBuilders.add(client().prepareIndex(INDEX, TYPE, "1").setSource(source));
|
|
|
- source = jsonBuilder()
|
|
|
- .startObject()
|
|
|
- .startObject(FIELD)
|
|
|
- .field("input", "suggestion")
|
|
|
- .field("weight", 2)
|
|
|
- .endObject()
|
|
|
- .field("title", "title2")
|
|
|
- .field("count", 2)
|
|
|
- .endObject();
|
|
|
- indexRequestBuilders.add(client().prepareIndex(INDEX, TYPE, "2").setSource(source));
|
|
|
- indexRandom(true, indexRequestBuilders);
|
|
|
-
|
|
|
- CompletionSuggestionBuilder prefix = SuggestBuilders.completionSuggestion(FIELD).prefix("sugg")
|
|
|
- .payload(Arrays.asList("title", "count"));
|
|
|
- SearchResponse searchResponse = client().prepareSearch(INDEX).suggest(new SuggestBuilder().addSuggestion("foo", prefix))
|
|
|
- .execute().actionGet();
|
|
|
- assertNoFailures(searchResponse);
|
|
|
- CompletionSuggestion completionSuggestion = searchResponse.getSuggest().getSuggestion("foo");
|
|
|
- List<CompletionSuggestion.Entry.Option> options = completionSuggestion.getEntries().get(0).getOptions();
|
|
|
- assertThat(options.size(), equalTo(2));
|
|
|
- assertThat(options.get(0).getText().toString(), equalTo("suggestion"));
|
|
|
- assertThat(options.get(0).getScore(), equalTo(2f));
|
|
|
- assertThat(options.get(1).getText().toString(), equalTo("suggest"));
|
|
|
- assertThat(options.get(1).getScore(), equalTo(1f));
|
|
|
-
|
|
|
- Map<String, List<Object>> firstPayload = options.get(0).getPayload();
|
|
|
- assertThat(firstPayload.keySet(), containsInAnyOrder("title", "count"));
|
|
|
- assertThat((String) firstPayload.get("title").get(0), equalTo("title2"));
|
|
|
- assertThat((long) firstPayload.get("count").get(0), equalTo(2L));
|
|
|
-
|
|
|
- Map<String, List<Object>> secondPayload = options.get(1).getPayload();
|
|
|
- assertThat(secondPayload.keySet(), containsInAnyOrder("title", "count"));
|
|
|
- assertThat((String) secondPayload.get("title").get(0), equalTo("title1"));
|
|
|
- assertThat((long) secondPayload.get("count").get(0), equalTo(1L));
|
|
|
- }
|
|
|
-
|
|
|
- public void testSuggestWithPayload() throws Exception {
|
|
|
- final CompletionMappingBuilder mapping = new CompletionMappingBuilder();
|
|
|
- createIndexAndMapping(mapping);
|
|
|
- int numDocs = randomIntBetween(10, 100);
|
|
|
- int numPayloadFields = randomIntBetween(2, 5);
|
|
|
- List<IndexRequestBuilder> indexRequestBuilders = new ArrayList<>();
|
|
|
- for (int i = 1; i <= numDocs; i++) {
|
|
|
- XContentBuilder source = jsonBuilder()
|
|
|
- .startObject()
|
|
|
- .startObject(FIELD)
|
|
|
- .field("input", "suggestion" + i)
|
|
|
- .field("weight", i)
|
|
|
- .endObject();
|
|
|
- for (int j = 0; j < numPayloadFields; j++) {
|
|
|
- source.field("test_field" + j, j + "value" + i);
|
|
|
- }
|
|
|
- source.endObject();
|
|
|
- indexRequestBuilders.add(client().prepareIndex(INDEX, TYPE, "" + i).setSource(source));
|
|
|
- }
|
|
|
- indexRandom(true, indexRequestBuilders);
|
|
|
-
|
|
|
- int suggestionSize = randomIntBetween(1, numDocs);
|
|
|
- int numRequestedPayloadFields = randomIntBetween(2, numPayloadFields);
|
|
|
- List<String> payloadFields = new ArrayList<>(numRequestedPayloadFields);
|
|
|
- for (int i = 0; i < numRequestedPayloadFields; i++) {
|
|
|
- payloadFields.add("test_field" + i + ".keyword");
|
|
|
- }
|
|
|
-
|
|
|
- CompletionSuggestionBuilder prefix = SuggestBuilders.completionSuggestion(FIELD).prefix("sugg")
|
|
|
- .size(suggestionSize).payload(payloadFields);
|
|
|
- SearchResponse searchResponse = client().prepareSearch(INDEX).suggest(new SuggestBuilder().addSuggestion("foo", prefix))
|
|
|
- .execute().actionGet();
|
|
|
- assertNoFailures(searchResponse);
|
|
|
- CompletionSuggestion completionSuggestion = searchResponse.getSuggest().getSuggestion("foo");
|
|
|
- CompletionSuggestion.Entry options = completionSuggestion.getEntries().get(0);
|
|
|
- assertThat(options.getOptions().size(), equalTo(suggestionSize));
|
|
|
- int id = numDocs;
|
|
|
- for (CompletionSuggestion.Entry.Option option : options) {
|
|
|
- assertThat(option.getText().toString(), equalTo("suggestion" + id));
|
|
|
- assertThat(option.getPayload().size(), equalTo(numRequestedPayloadFields));
|
|
|
- for (int i = 0; i < numRequestedPayloadFields; i++) {
|
|
|
- List<Object> fieldValue = option.getPayload().get("test_field" + i + ".keyword");
|
|
|
- assertNotNull(fieldValue);
|
|
|
- assertThat(fieldValue.size(), equalTo(1));
|
|
|
- assertThat((String)fieldValue.get(0), equalTo(i + "value" + id));
|
|
|
- }
|
|
|
- id--;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
public void testSuggestDocument() throws Exception {
|
|
|
final CompletionMappingBuilder mapping = new CompletionMappingBuilder();
|
|
|
createIndexAndMapping(mapping);
|