mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-02-18 19:05:06 +00:00
parent
1d81ec1562
commit
e864b93abf
@ -18,9 +18,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.elasticsearch.index.query;
|
package org.elasticsearch.index.query;
|
||||||
|
|
||||||
import org.apache.lucene.index.DocValues;
|
|
||||||
import org.apache.lucene.index.LeafReaderContext;
|
import org.apache.lucene.index.LeafReaderContext;
|
||||||
import org.apache.lucene.index.NumericDocValues;
|
|
||||||
import org.apache.lucene.index.SortedNumericDocValues;
|
import org.apache.lucene.index.SortedNumericDocValues;
|
||||||
import org.apache.lucene.index.Term;
|
import org.apache.lucene.index.Term;
|
||||||
import org.apache.lucene.search.BooleanQuery;
|
import org.apache.lucene.search.BooleanQuery;
|
||||||
@ -86,6 +84,11 @@ public final class TermsSetQueryBuilder extends AbstractQueryBuilder<TermsSetQue
|
|||||||
out.writeOptionalWriteable(minimumShouldMatchScript);
|
out.writeOptionalWriteable(minimumShouldMatchScript);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// package protected for testing purpose
|
||||||
|
String getFieldName() {
|
||||||
|
return fieldName;
|
||||||
|
}
|
||||||
|
|
||||||
public List<?> getValues() {
|
public List<?> getValues() {
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
@ -116,9 +119,10 @@ public final class TermsSetQueryBuilder extends AbstractQueryBuilder<TermsSetQue
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean doEquals(TermsSetQueryBuilder other) {
|
protected boolean doEquals(TermsSetQueryBuilder other) {
|
||||||
return Objects.equals(fieldName, this.fieldName) && Objects.equals(values, this.values) &&
|
return Objects.equals(fieldName, other.fieldName)
|
||||||
Objects.equals(minimumShouldMatchField, this.minimumShouldMatchField) &&
|
&& Objects.equals(values, other.values)
|
||||||
Objects.equals(minimumShouldMatchScript, this.minimumShouldMatchScript);
|
&& Objects.equals(minimumShouldMatchField, other.minimumShouldMatchField)
|
||||||
|
&& Objects.equals(minimumShouldMatchScript, other.minimumShouldMatchScript);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -59,7 +59,9 @@ import java.util.Collections;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
|
import static java.util.Collections.emptyMap;
|
||||||
import static org.hamcrest.Matchers.containsString;
|
import static org.hamcrest.Matchers.containsString;
|
||||||
import static org.hamcrest.Matchers.equalTo;
|
import static org.hamcrest.Matchers.equalTo;
|
||||||
import static org.hamcrest.Matchers.instanceOf;
|
import static org.hamcrest.Matchers.instanceOf;
|
||||||
@ -85,17 +87,13 @@ public class TermsSetQueryBuilderTests extends AbstractQueryTestCase<TermsSetQue
|
|||||||
do {
|
do {
|
||||||
fieldName = randomFrom(MAPPED_FIELD_NAMES);
|
fieldName = randomFrom(MAPPED_FIELD_NAMES);
|
||||||
} while (fieldName.equals(GEO_POINT_FIELD_NAME) || fieldName.equals(GEO_SHAPE_FIELD_NAME));
|
} while (fieldName.equals(GEO_POINT_FIELD_NAME) || fieldName.equals(GEO_SHAPE_FIELD_NAME));
|
||||||
int numValues = randomIntBetween(0, 10);
|
List<?> randomTerms = randomValues(fieldName);
|
||||||
List<Object> randomTerms = new ArrayList<>(numValues);
|
|
||||||
for (int i = 0; i < numValues; i++) {
|
|
||||||
randomTerms.add(getRandomValueForFieldName(fieldName));
|
|
||||||
}
|
|
||||||
TermsSetQueryBuilder queryBuilder = new TermsSetQueryBuilder(STRING_FIELD_NAME, randomTerms);
|
TermsSetQueryBuilder queryBuilder = new TermsSetQueryBuilder(STRING_FIELD_NAME, randomTerms);
|
||||||
if (randomBoolean()) {
|
if (randomBoolean()) {
|
||||||
queryBuilder.setMinimumShouldMatchField("m_s_m");
|
queryBuilder.setMinimumShouldMatchField("m_s_m");
|
||||||
} else {
|
} else {
|
||||||
queryBuilder.setMinimumShouldMatchScript(
|
queryBuilder.setMinimumShouldMatchScript(
|
||||||
new Script(ScriptType.INLINE, MockScriptEngine.NAME, "_script", Collections.emptyMap()));
|
new Script(ScriptType.INLINE, MockScriptEngine.NAME, "_script", emptyMap()));
|
||||||
}
|
}
|
||||||
return queryBuilder;
|
return queryBuilder;
|
||||||
}
|
}
|
||||||
@ -122,6 +120,41 @@ public class TermsSetQueryBuilderTests extends AbstractQueryTestCase<TermsSetQue
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TermsSetQueryBuilder mutateInstance(final TermsSetQueryBuilder instance) throws IOException {
|
||||||
|
String fieldName = instance.getFieldName();
|
||||||
|
List<?> values = instance.getValues();
|
||||||
|
String minimumShouldMatchField = null;
|
||||||
|
Script minimumShouldMatchScript = null;
|
||||||
|
|
||||||
|
switch (randomIntBetween(0, 3)) {
|
||||||
|
case 0:
|
||||||
|
Predicate<String> predicate = s -> s.equals(instance.getFieldName()) == false && s.equals(GEO_POINT_FIELD_NAME) == false
|
||||||
|
&& s.equals(GEO_SHAPE_FIELD_NAME) == false;
|
||||||
|
fieldName = randomValueOtherThanMany(predicate, () -> randomFrom(MAPPED_FIELD_NAMES));
|
||||||
|
values = randomValues(fieldName);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
values = randomValues(fieldName);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
minimumShouldMatchField = randomAlphaOfLengthBetween(1, 10);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
minimumShouldMatchScript = new Script(ScriptType.INLINE, MockScriptEngine.NAME, randomAlphaOfLength(10), emptyMap());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
TermsSetQueryBuilder newInstance = new TermsSetQueryBuilder(fieldName, values);
|
||||||
|
if (minimumShouldMatchField != null) {
|
||||||
|
newInstance.setMinimumShouldMatchField(minimumShouldMatchField);
|
||||||
|
}
|
||||||
|
if (minimumShouldMatchScript != null) {
|
||||||
|
newInstance.setMinimumShouldMatchScript(minimumShouldMatchScript);
|
||||||
|
}
|
||||||
|
return newInstance;
|
||||||
|
}
|
||||||
|
|
||||||
public void testBothFieldAndScriptSpecified() {
|
public void testBothFieldAndScriptSpecified() {
|
||||||
TermsSetQueryBuilder queryBuilder = new TermsSetQueryBuilder("_field", Collections.emptyList());
|
TermsSetQueryBuilder queryBuilder = new TermsSetQueryBuilder("_field", Collections.emptyList());
|
||||||
queryBuilder.setMinimumShouldMatchScript(new Script(""));
|
queryBuilder.setMinimumShouldMatchScript(new Script(""));
|
||||||
@ -215,7 +248,7 @@ public class TermsSetQueryBuilderTests extends AbstractQueryTestCase<TermsSetQue
|
|||||||
|
|
||||||
try (IndexReader ir = DirectoryReader.open(directory)) {
|
try (IndexReader ir = DirectoryReader.open(directory)) {
|
||||||
QueryShardContext context = createShardContext();
|
QueryShardContext context = createShardContext();
|
||||||
Script script = new Script(ScriptType.INLINE, MockScriptEngine.NAME, "_script", Collections.emptyMap());
|
Script script = new Script(ScriptType.INLINE, MockScriptEngine.NAME, "_script", emptyMap());
|
||||||
Query query = new TermsSetQueryBuilder("message", Arrays.asList("a", "b", "c", "d"))
|
Query query = new TermsSetQueryBuilder("message", Arrays.asList("a", "b", "c", "d"))
|
||||||
.setMinimumShouldMatchScript(script).doToQuery(context);
|
.setMinimumShouldMatchScript(script).doToQuery(context);
|
||||||
IndexSearcher searcher = new IndexSearcher(ir);
|
IndexSearcher searcher = new IndexSearcher(ir);
|
||||||
@ -228,6 +261,16 @@ public class TermsSetQueryBuilderTests extends AbstractQueryTestCase<TermsSetQue
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static List<?> randomValues(final String fieldName) {
|
||||||
|
final int numValues = randomIntBetween(0, 10);
|
||||||
|
final List<Object> values = new ArrayList<>(numValues);
|
||||||
|
|
||||||
|
for (int i = 0; i < numValues; i++) {
|
||||||
|
values.add(getRandomValueForFieldName(fieldName));
|
||||||
|
}
|
||||||
|
return values;
|
||||||
|
}
|
||||||
|
|
||||||
public static class CustomScriptPlugin extends MockScriptPlugin {
|
public static class CustomScriptPlugin extends MockScriptPlugin {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
x
Reference in New Issue
Block a user