List of usage examples for org.apache.lucene.util.automaton Operations minus
static public Automaton minus(Automaton a1, Automaton a2, int maxDeterminizedStates)
a1 and the complement of the language of a2. From source file:org.codelibs.elasticsearch.search.aggregations.bucket.terms.support.IncludeExclude.java
License:Apache License
private Automaton toAutomaton() { Automaton a = null;// w w w . j a v a2s . c o m if (include != null) { a = include.toAutomaton(); } else if (includeValues != null) { a = Automata.makeStringUnion(includeValues); } else { a = Automata.makeAnyString(); } if (exclude != null) { a = Operations.minus(a, exclude.toAutomaton(), Operations.DEFAULT_MAX_DETERMINIZED_STATES); } else if (excludeValues != null) { a = Operations.minus(a, Automata.makeStringUnion(excludeValues), Operations.DEFAULT_MAX_DETERMINIZED_STATES); } return a; }
From source file:org.elasticsearch.xpack.core.security.authz.accesscontrol.FieldSubsetReaderTests.java
License:Open Source License
public void testSourceFiltering() { // include on top-level value Map<String, Object> map = new HashMap<>(); map.put("foo", 3); map.put("bar", "baz"); CharacterRunAutomaton include = new CharacterRunAutomaton(Automata.makeString("foo")); Map<String, Object> filtered = FieldSubsetReader.filter(map, include, 0); Map<String, Object> expected = new HashMap<>(); expected.put("foo", 3); assertEquals(expected, filtered);/* w w w . j av a2s . c o m*/ // include on inner wildcard map = new HashMap<>(); Map<String, Object> subMap = new HashMap<>(); subMap.put("bar", 42); subMap.put("baz", 6); map.put("foo", subMap); map.put("bar", "baz"); include = new CharacterRunAutomaton(Automatons.patterns("foo.*")); filtered = FieldSubsetReader.filter(map, include, 0); expected = new HashMap<>(); expected.put("foo", subMap); assertEquals(expected, filtered); // include on leading wildcard include = new CharacterRunAutomaton(Automatons.patterns("*.bar")); filtered = FieldSubsetReader.filter(map, include, 0); expected = new HashMap<>(); subMap = new HashMap<>(); subMap.put("bar", 42); expected.put("foo", subMap); assertEquals(expected, filtered); // include on inner value include = new CharacterRunAutomaton(Automatons.patterns("foo.bar")); filtered = FieldSubsetReader.filter(map, include, 0); assertEquals(expected, filtered); // exclude on exact value include = new CharacterRunAutomaton(Operations.minus(Automata.makeAnyString(), Automatons.patterns("foo.bar"), Operations.DEFAULT_MAX_DETERMINIZED_STATES)); filtered = FieldSubsetReader.filter(map, include, 0); expected = new HashMap<>(); expected.put("bar", "baz"); expected.put("foo", Collections.singletonMap("baz", 6)); assertEquals(expected, filtered); // exclude on wildcard include = new CharacterRunAutomaton(Operations.minus(Automata.makeAnyString(), Automatons.patterns("foo.*"), Operations.DEFAULT_MAX_DETERMINIZED_STATES)); filtered = FieldSubsetReader.filter(map, include, 0); expected = Collections.singletonMap("bar", "baz"); assertEquals(expected, filtered); // include on inner array map = new HashMap<>(); List<Object> subArray = new ArrayList<>(); subMap = new HashMap<>(); subMap.put("bar", 42); subMap.put("baz", "foo"); subArray.add(subMap); subArray.add(12); map.put("foo", subArray); include = new CharacterRunAutomaton(Automatons.patterns("foo.bar")); filtered = FieldSubsetReader.filter(map, include, 0); expected = new HashMap<>(); subArray = new ArrayList<>(); subMap = new HashMap<>(); subMap.put("bar", 42); subArray.add(subMap); expected.put("foo", subArray); assertEquals(expected, filtered); // include on inner array 2 include = new CharacterRunAutomaton(Automatons.patterns("foo")); filtered = FieldSubsetReader.filter(map, include, 0); expected = new HashMap<>(); subArray = new ArrayList<>(); subArray.add(12); expected.put("foo", subArray); assertEquals(expected, filtered); // exclude on inner array include = new CharacterRunAutomaton(Operations.minus(Automata.makeAnyString(), Automatons.patterns("foo.baz"), Operations.DEFAULT_MAX_DETERMINIZED_STATES)); filtered = FieldSubsetReader.filter(map, include, 0); expected = new HashMap<>(); subArray = new ArrayList<>(); subMap = new HashMap<>(); subMap.put("bar", 42); subArray.add(subMap); subArray.add(12); expected.put("foo", subArray); assertEquals(expected, filtered); // exclude on inner array 2 include = new CharacterRunAutomaton(Operations.minus(Automata.makeAnyString(), Automatons.patterns("foo"), Operations.DEFAULT_MAX_DETERMINIZED_STATES)); filtered = FieldSubsetReader.filter(map, include, 0); expected = new HashMap<>(); subArray = new ArrayList<>(); subMap = new HashMap<>(); subMap.put("bar", 42); subMap.put("baz", "foo"); subArray.add(subMap); expected.put("foo", subArray); assertEquals(expected, filtered); // json array objects that have no matching fields should be left empty instead of being removed: // (otherwise nested inner hit source filtering fails with AOOB) map = new HashMap<>(); map.put("foo", "value"); List<Map<?, ?>> values = new ArrayList<>(); values.add(Collections.singletonMap("foo", "1")); values.add(Collections.singletonMap("baz", "2")); map.put("bar", values); include = new CharacterRunAutomaton(Automatons.patterns("bar.baz")); filtered = FieldSubsetReader.filter(map, include, 0); expected = new HashMap<>(); expected.put("bar", Arrays.asList(new HashMap<>(), Collections.singletonMap("baz", "2"))); assertEquals(expected, filtered); }
From source file:org.opengrok.suggest.query.SuggesterRangeQuery.java
License:Open Source License
/** {@inheritDoc} */ @Override// w w w . j a v a 2 s .com public TermsEnum getTermsEnumForSuggestions(final Terms terms) { if (terms == null) { return TermsEnum.EMPTY; } BytesRef prefix = getPrefix(); if (prefix != null) { Automaton prefixAutomaton = PrefixQuery.toAutomaton(prefix); Automaton finalAutomaton; if (suggestPosition == SuggestPosition.LOWER) { Automaton binaryInt = Automata.makeBinaryInterval(getLowerTerm(), includesLower(), getUpperTerm(), includesUpper()); finalAutomaton = Operations.intersection(binaryInt, prefixAutomaton); } else { Automaton binaryInt = Automata.makeBinaryInterval(null, true, getLowerTerm(), !includesLower()); finalAutomaton = Operations.minus(prefixAutomaton, binaryInt, Integer.MIN_VALUE); } CompiledAutomaton compiledAutomaton = new CompiledAutomaton(finalAutomaton); try { return compiledAutomaton.getTermsEnum(terms); } catch (IOException e) { logger.log(Level.WARNING, "Could not compile automaton for range suggestions", e); } } return TermsEnum.EMPTY; }