mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-02-17 10:25:15 +00:00
Adding parsing for zero terms query for multi match
Tests for multi-match zero_terms_query and making references to the ZeroTermsQuery enum consistent to others used in MultiMatchQueryBuilder
This commit is contained in:
parent
3f83904680
commit
6a93fbcf07
@ -69,6 +69,8 @@ public class MultiMatchQueryBuilder extends BaseQueryBuilder implements Boostabl
|
||||
|
||||
private Float cutoffFrequency = null;
|
||||
|
||||
private MatchQueryBuilder.ZeroTermsQuery zeroTermsQuery = null;
|
||||
|
||||
/**
|
||||
* Constructs a new text query.
|
||||
*/
|
||||
@ -205,6 +207,12 @@ public class MultiMatchQueryBuilder extends BaseQueryBuilder implements Boostabl
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
public MultiMatchQueryBuilder zeroTermsQuery(MatchQueryBuilder.ZeroTermsQuery zeroTermsQuery) {
|
||||
this.zeroTermsQuery = zeroTermsQuery;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(MultiMatchQueryParser.NAME);
|
||||
@ -273,6 +281,10 @@ public class MultiMatchQueryBuilder extends BaseQueryBuilder implements Boostabl
|
||||
builder.field("cutoff_frequency", cutoffFrequency);
|
||||
}
|
||||
|
||||
if (zeroTermsQuery != null) {
|
||||
builder.field("zero_terms_query", zeroTermsQuery.toString());
|
||||
}
|
||||
|
||||
builder.endObject();
|
||||
}
|
||||
}
|
@ -149,6 +149,15 @@ public class MultiMatchQueryParser implements QueryParser {
|
||||
multiMatchQuery.setCommonTermsCutoff(parser.floatValue());
|
||||
} else if ("lenient".equals(currentFieldName)) {
|
||||
multiMatchQuery.setLenient(parser.booleanValue());
|
||||
} else if ("zero_terms_query".equals(currentFieldName)) {
|
||||
String zeroTermsDocs = parser.text();
|
||||
if ("none".equalsIgnoreCase(zeroTermsDocs)) {
|
||||
multiMatchQuery.setZeroTermsQuery(MatchQuery.ZeroTermsQuery.NONE);
|
||||
} else if ("all".equalsIgnoreCase(zeroTermsDocs)) {
|
||||
multiMatchQuery.setZeroTermsQuery(MatchQuery.ZeroTermsQuery.ALL);
|
||||
} else {
|
||||
throw new QueryParsingException(parseContext.index(), "Unsupported zero_terms_docs value [" + zeroTermsDocs + "]");
|
||||
}
|
||||
} else {
|
||||
throw new QueryParsingException(parseContext.index(), "[match] query does not support [" + currentFieldName + "]");
|
||||
}
|
||||
|
@ -621,6 +621,43 @@ public class SimpleQueryTests extends AbstractNodesTests {
|
||||
assertThat(searchResponse.getHits().totalHits(), equalTo(2l));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMultiMatchQueryZeroTermsQuery() {
|
||||
try {
|
||||
client.admin().indices().prepareDelete("test").execute().actionGet();
|
||||
} catch (Exception e) {
|
||||
// ignore
|
||||
}
|
||||
|
||||
client.admin().indices().prepareCreate("test").setSettings(ImmutableSettings.settingsBuilder().put("index.number_of_shards", 1)).execute().actionGet();
|
||||
client.prepareIndex("test", "type1", "1").setSource("field1", "value1", "field2", "value2").execute().actionGet();
|
||||
client.prepareIndex("test", "type1", "2").setSource("field1", "value3", "field2", "value4").execute().actionGet();
|
||||
client.admin().indices().prepareRefresh("test").execute().actionGet();
|
||||
|
||||
BoolQueryBuilder boolQuery = boolQuery()
|
||||
.must(multiMatchQuery("a", "field1", "field2").zeroTermsQuery(MatchQueryBuilder.ZeroTermsQuery.NONE))
|
||||
.must(multiMatchQuery("value1", "field1", "field2").zeroTermsQuery(MatchQueryBuilder.ZeroTermsQuery.NONE)); // Fields are ORed together
|
||||
SearchResponse searchResponse = client.prepareSearch()
|
||||
.setQuery(boolQuery)
|
||||
.execute().actionGet();
|
||||
assertThat(searchResponse.getHits().totalHits(), equalTo(0l));
|
||||
|
||||
boolQuery = boolQuery()
|
||||
.must(multiMatchQuery("a", "field1", "field2").zeroTermsQuery(MatchQueryBuilder.ZeroTermsQuery.ALL))
|
||||
.must(multiMatchQuery("value4", "field1", "field2").zeroTermsQuery(MatchQueryBuilder.ZeroTermsQuery.ALL));
|
||||
searchResponse = client.prepareSearch()
|
||||
.setQuery(boolQuery)
|
||||
.execute().actionGet();
|
||||
assertThat(searchResponse.getHits().totalHits(), equalTo(1l));
|
||||
|
||||
boolQuery = boolQuery()
|
||||
.must(multiMatchQuery("a", "field1").zeroTermsQuery(MatchQueryBuilder.ZeroTermsQuery.ALL));
|
||||
searchResponse = client.prepareSearch()
|
||||
.setQuery(boolQuery)
|
||||
.execute().actionGet();
|
||||
assertThat(searchResponse.getHits().totalHits(), equalTo(2l));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFuzzyQueryString() {
|
||||
client.admin().indices().prepareDelete().execute().actionGet();
|
||||
|
Loading…
x
Reference in New Issue
Block a user