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());
|
qpSettings.queryTypes(parseContext.queryTypes());
|
||||||
Query query = parseContext.indexCache().queryParserCache().get(qpSettings);
|
Query query = parseContext.indexCache().queryParserCache().get(qpSettings);
|
||||||
if (query != null) {
|
if (query != null) {
|
||||||
|
if (queryName != null) {
|
||||||
|
parseContext.addNamedQuery(queryName, query);
|
||||||
|
}
|
||||||
return 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