Skip to content

Commit

Permalink
[Backport 2.x] Fix SuggestSearch.testSkipDuplicates by forceing refre…
Browse files Browse the repository at this point in the history
…sh when indexing its test documents (opensearch-project#11068)

During the testSkipDuplicates its possible that not all documents were
fully indexed by the time the search with suggestions was created,
updating the indexing operations to refresh the index before
returning.

As its possible that did not fix the issue, I've added logging around
the test case to capture the state when the error occurred that can
assist in future troubleshooting.

Signed-off-by: Peter Nied <[email protected]>
(cherry picked from commit 0ba5d58)
  • Loading branch information
peternied committed Nov 8, 2023
1 parent b6b847c commit 1e61939
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 0 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),

### Fixed
- Fix class_cast_exception when passing int to _version and other metadata fields in ingest simulate API ([#10101](https://github.com/opensearch-project/OpenSearch/pull/10101))
- Fix SuggestSearch.testSkipDuplicates by forcing refresh when indexing its test documents ([#11068](https://github.com/opensearch-project/OpenSearch/pull/11068))

### Security

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@
import java.util.Set;

import static org.opensearch.action.support.WriteRequest.RefreshPolicy.IMMEDIATE;
import static org.opensearch.action.support.WriteRequest.RefreshPolicy.WAIT_UNTIL;
import static org.opensearch.cluster.metadata.IndexMetadata.SETTING_NUMBER_OF_REPLICAS;
import static org.opensearch.cluster.metadata.IndexMetadata.SETTING_NUMBER_OF_SHARDS;
import static org.opensearch.common.xcontent.XContentFactory.jsonBuilder;
Expand Down Expand Up @@ -1171,6 +1172,7 @@ public void testSkipDuplicates() throws Exception {
createIndexAndMapping(mapping);
int numDocs = randomIntBetween(10, 100);
int numUnique = randomIntBetween(1, numDocs);
logger.info("Suggestion duplicate parameters: numDocs {} numUnique {}", numDocs, numUnique);
List<IndexRequestBuilder> indexRequestBuilders = new ArrayList<>();
int[] weights = new int[numUnique];
Integer[] termIds = new Integer[numUnique];
Expand All @@ -1180,8 +1182,10 @@ public void testSkipDuplicates() throws Exception {
int weight = randomIntBetween(0, 100);
weights[id] = Math.max(weight, weights[id]);
String suggestion = "suggestion-" + String.format(Locale.ENGLISH, "%03d", id);
logger.info("Creating {}, id {}, weight {}", suggestion, i, id, weight);
indexRequestBuilders.add(
client().prepareIndex(INDEX)
.setRefreshPolicy(WAIT_UNTIL)
.setSource(
jsonBuilder().startObject()
.startObject(FIELD)
Expand All @@ -1195,10 +1199,12 @@ public void testSkipDuplicates() throws Exception {
indexRandom(true, indexRequestBuilders);

Arrays.sort(termIds, Comparator.comparingInt(o -> weights[(int) o]).reversed().thenComparingInt(a -> (int) a));
logger.info("Expected terms id ordered {}", (Object[]) termIds);
String[] expected = new String[numUnique];
for (int i = 0; i < termIds.length; i++) {
expected[i] = "suggestion-" + String.format(Locale.ENGLISH, "%03d", termIds[i]);
}
logger.info("Expected suggestions field values {}", (Object[]) expected);
CompletionSuggestionBuilder completionSuggestionBuilder = SuggestBuilders.completionSuggestion(FIELD)
.prefix("sugg")
.skipDuplicates(true)
Expand All @@ -1207,6 +1213,7 @@ public void testSkipDuplicates() throws Exception {
SearchResponse searchResponse = client().prepareSearch(INDEX)
.suggest(new SuggestBuilder().addSuggestion("suggestions", completionSuggestionBuilder))
.get();
logger.info("Search Response with Suggestions {}", searchResponse);
assertSuggestions(searchResponse, true, "suggestions", expected);
}

Expand Down

0 comments on commit 1e61939

Please sign in to comment.