mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-02-19 19:35:02 +00:00
Fix analyzed prefix query in query_string (#35756)
This change fixes analyzed prefix queries in `query_string` to be ignored if all terms are removed during the analysis. Closes #31702
This commit is contained in:
parent
2e37f17a7d
commit
be69a774df
@ -484,10 +484,13 @@ public class QueryStringQueryParser extends XQueryParser {
|
|||||||
List<Query> queries = new ArrayList<>();
|
List<Query> queries = new ArrayList<>();
|
||||||
for (Map.Entry<String, Float> entry : fields.entrySet()) {
|
for (Map.Entry<String, Float> entry : fields.entrySet()) {
|
||||||
Query q = getPrefixQuerySingle(entry.getKey(), termStr);
|
Query q = getPrefixQuerySingle(entry.getKey(), termStr);
|
||||||
assert q != null;
|
if (q != null) {
|
||||||
queries.add(applyBoost(q, entry.getValue()));
|
queries.add(applyBoost(q, entry.getValue()));
|
||||||
}
|
}
|
||||||
if (queries.size() == 1) {
|
}
|
||||||
|
if (queries.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
} else if (queries.size() == 1) {
|
||||||
return queries.get(0);
|
return queries.get(0);
|
||||||
} else {
|
} else {
|
||||||
float tiebreaker = groupTieBreaker == null ? type.tieBreaker() : groupTieBreaker;
|
float tiebreaker = groupTieBreaker == null ? type.tieBreaker() : groupTieBreaker;
|
||||||
@ -561,7 +564,7 @@ public class QueryStringQueryParser extends XQueryParser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (tlist.size() == 0) {
|
if (tlist.size() == 0) {
|
||||||
return super.getPrefixQuery(field, termStr);
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tlist.size() == 1 && tlist.get(0).size() == 1) {
|
if (tlist.size() == 1 && tlist.get(0).size() == 1) {
|
||||||
|
@ -1422,6 +1422,16 @@ public class QueryStringQueryBuilderTests extends AbstractQueryTestCase<QueryStr
|
|||||||
assertEquals(expected, query);
|
assertEquals(expected, query);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testAnalyzedPrefix() throws Exception {
|
||||||
|
Query query = new QueryStringQueryBuilder("quick* @&*")
|
||||||
|
.field(STRING_FIELD_NAME)
|
||||||
|
.analyzer("standard")
|
||||||
|
.analyzeWildcard(true)
|
||||||
|
.toQuery(createShardContext());
|
||||||
|
Query expected = new PrefixQuery(new Term(STRING_FIELD_NAME, "quick"));
|
||||||
|
assertEquals(expected, query);
|
||||||
|
}
|
||||||
|
|
||||||
private static IndexMetaData newIndexMeta(String name, Settings oldIndexSettings, Settings indexSettings) {
|
private static IndexMetaData newIndexMeta(String name, Settings oldIndexSettings, Settings indexSettings) {
|
||||||
Settings build = Settings.builder().put(oldIndexSettings)
|
Settings build = Settings.builder().put(oldIndexSettings)
|
||||||
.put(indexSettings)
|
.put(indexSettings)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user