Query String caching could cause matched_filters not working
When searching with a query containing query_strings inside a bool query, the specified _name is randomly missing from the results due to caching. Closes #4361. Closes #4371.
This commit is contained in:
parent
8c1de501e7
commit
822acfa568
|
@ -203,6 +203,9 @@ public class QueryStringQueryParser implements QueryParser {
|
|||
qpSettings.queryTypes(parseContext.queryTypes());
|
||||
Query query = parseContext.indexCache().queryParserCache().get(qpSettings);
|
||||
if (query != null) {
|
||||
if (queryName != null) {
|
||||
parseContext.addNamedQuery(queryName, query);
|
||||
}
|
||||
return query;
|
||||
}
|
||||
|
||||
|
|
|
@ -203,4 +203,43 @@ public class MatchedQueriesTests extends ElasticsearchIntegrationTest {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test case for issue #4361: https://github.com/elasticsearch/elasticsearch/issues/4361
|
||||
*/
|
||||
@Test
|
||||
public void testMatchedWithShould() throws Exception {
|
||||
createIndex("test");
|
||||
ensureGreen();
|
||||
|
||||
client().prepareIndex("test", "type1", "1").setSource("content", "Lorem ipsum dolor sit amet").get();
|
||||
client().prepareIndex("test", "type1", "2").setSource("content", "consectetur adipisicing elit").get();
|
||||
refresh();
|
||||
|
||||
// Execute search 5 times to load it in cache
|
||||
for (int i = 0; i < 5; i++) {
|
||||
SearchResponse searchResponse = client().prepareSearch()
|
||||
.setQuery(
|
||||
boolQuery()
|
||||
.minimumNumberShouldMatch(1)
|
||||
.should(queryString("dolor").queryName("dolor"))
|
||||
.should(queryString("elit").queryName("elit"))
|
||||
)
|
||||
.setPreference("_primary")
|
||||
.get();
|
||||
|
||||
assertHitCount(searchResponse, 2l);
|
||||
for (SearchHit hit : searchResponse.getHits()) {
|
||||
if (hit.id().equals("1")) {
|
||||
assertThat(hit.matchedQueries().length, equalTo(1));
|
||||
assertThat(hit.matchedQueries(), hasItemInArray("dolor"));
|
||||
} else if (hit.id().equals("2")) {
|
||||
assertThat(hit.matchedQueries().length, equalTo(1));
|
||||
assertThat(hit.matchedQueries(), hasItemInArray("elit"));
|
||||
} else {
|
||||
fail("Unexpected document returned with id " + hit.id());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue