use of com.yahoo.prelude.query.AndItem in project vespa by vespa-engine.
the class PhraseMatcherTestCase method testPhraseMatchingCaseInsensitiveWithPluralIgnore.
@Test
public void testPhraseMatchingCaseInsensitiveWithPluralIgnore() {
PhraseMatcher matcher = new PhraseMatcher("src/test/java/com/yahoo/prelude/querytransform/test/test-fsa.fsa", true);
AndItem and = new AndItem();
and.addItem(new WordItem("noisebefore"));
final String firstWord = "thI";
and.addItem(new WordItem(firstWord));
final String secondWord = "Is";
and.addItem(new WordItem(secondWord));
final String thirdWord = "A";
and.addItem(new WordItem(thirdWord));
final String fourthWord = "tEsts";
and.addItem(new WordItem(fourthWord));
and.addItem(new WordItem("noiseafter"));
List<?> matches = matcher.matchPhrases(and);
assertNotNull(matches);
assertEquals(1, matches.size());
PhraseMatcher.Phrase match = (PhraseMatcher.Phrase) matches.get(0);
assertEquals(4, match.getLength());
assertEquals("", match.getData());
assertEquals(and, match.getOwner());
assertEquals(1, match.getStartIndex());
PhraseMatcher.Phrase.MatchIterator i = match.itemIterator();
assertEquals(new WordItem(firstWord), i.next());
assertEquals("this", i.getReplace());
assertEquals(new WordItem(secondWord), i.next());
assertEquals(null, i.getReplace());
assertEquals(new WordItem(thirdWord), i.next());
assertEquals(null, i.getReplace());
assertEquals(new WordItem(fourthWord), i.next());
assertEquals("test", i.getReplace());
assertFalse(i.hasNext());
}
use of com.yahoo.prelude.query.AndItem in project vespa by vespa-engine.
the class PhraseMatcherTestCase method testPhraseMatching.
@Test
public void testPhraseMatching() {
PhraseMatcher matcher = new PhraseMatcher("src/test/java/com/yahoo/prelude/querytransform/test/test-fsa.fsa", true);
AndItem and = new AndItem();
and.addItem(new WordItem("noisebefore"));
and.addItem(new WordItem("this"));
and.addItem(new WordItem("is"));
and.addItem(new WordItem("a"));
and.addItem(new WordItem("test"));
and.addItem(new WordItem("noiseafter"));
List<?> matches = matcher.matchPhrases(and);
assertNotNull(matches);
assertEquals(1, matches.size());
PhraseMatcher.Phrase match = (PhraseMatcher.Phrase) matches.get(0);
assertEquals(4, match.getLength());
assertEquals("", match.getData());
assertEquals(and, match.getOwner());
assertEquals(1, match.getStartIndex());
PhraseMatcher.Phrase.MatchIterator i = match.itemIterator();
assertEquals(new WordItem("this"), i.next());
assertEquals(null, i.getReplace());
assertEquals(new WordItem("is"), i.next());
assertEquals(null, i.getReplace());
assertEquals(new WordItem("a"), i.next());
assertEquals(null, i.getReplace());
assertEquals(new WordItem("test"), i.next());
assertEquals(null, i.getReplace());
assertFalse(i.hasNext());
}
use of com.yahoo.prelude.query.AndItem in project vespa by vespa-engine.
the class QueryCombinatorTestCase method testMultiPart.
public void testMultiPart() {
Query q = new Query("?query=a&query.juhu=b&query.nalle=c");
Execution e = new Execution(searcher, Execution.Context.createContextStub(new IndexFacts()));
Set<String> items = new HashSet<>();
items.add("a");
items.add("b");
items.add("c");
e.search(q);
// OK, the problem here is we have no way of knowing whether nalle or
// juhu was added first, since we have passed through HashMap instances
// inside the implementation
AndItem root = (AndItem) q.getModel().getQueryTree().getRoot();
Iterator<?> iterator = root.getItemIterator();
while (iterator.hasNext()) {
WordItem word = (WordItem) iterator.next();
if (items.contains(word.stringValue())) {
items.remove(word.stringValue());
} else {
assertFalse("Got unexpected item in query tree: " + word.stringValue(), true);
}
}
assertEquals("Not all expected items found in query.", 0, items.size());
Set<StringPair> nastierItems = new HashSet<>();
nastierItems.add(new StringPair("", "a"));
nastierItems.add(new StringPair("juhu.22[gnuff]", "b"));
nastierItems.add(new StringPair("gnuff[8].name(\"tralala\")", "c"));
q = new Query("?query=a&query.juhu=b&defidx.juhu=juhu.22[gnuff]&query.nalle=c&defidx.nalle=gnuff[8].name(%22tralala%22)");
e = new Execution(searcher, Execution.Context.createContextStub(new IndexFacts()));
e.search(q);
root = (AndItem) q.getModel().getQueryTree().getRoot();
iterator = root.getItemIterator();
while (iterator.hasNext()) {
WordItem word = (WordItem) iterator.next();
StringPair asPair = new StringPair(word.getIndexName(), word.stringValue());
if (nastierItems.contains(asPair)) {
nastierItems.remove(asPair);
} else {
assertFalse("Got unexpected item in query tree: (" + word.getIndexName() + ", " + word.stringValue() + ")", true);
}
}
assertEquals("Not all expected items found in query.", 0, nastierItems.size());
}
use of com.yahoo.prelude.query.AndItem in project vespa by vespa-engine.
the class QueryTestCase method testSimpleFunctionality.
@Test
public void testSimpleFunctionality() {
Query q = new Query(QueryTestCase.httpEncode("/sdfsd.html?query=this is a simple query&aParameter"));
assertEquals("this is a simple query", q.getModel().getQueryString());
assertNotNull(q.getModel().getQueryTree());
assertNull(q.getModel().getDefaultIndex());
assertEquals("", q.properties().get("aParameter"));
assertNull(q.properties().get("notSetParameter"));
Query query = q;
String body = "a bb. ccc??!";
Linguistics linguistics = new SimpleLinguistics();
AndItem and = new AndItem();
for (Token token : linguistics.getTokenizer().tokenize(body, Language.ENGLISH, StemMode.SHORTEST, true)) {
if (token.isIndexable())
and.addItem(new WordItem(token.getTokenString(), "body"));
}
query.getModel().getQueryTree().setRoot(and);
System.out.println(query);
}
use of com.yahoo.prelude.query.AndItem in project vespa by vespa-engine.
the class SerializeItemTestCase method serialize_and_item.
@Test
public void serialize_and_item() throws ParseException {
AndItem andItem = new AndItem();
andItem.addItem(new WordItem("first"));
andItem.addItem(new WordItem("second"));
AndItem deSerialized = serializeThenParse(andItem);
assertThat(getWord(deSerialized.getItem(0)), is("first"));
assertThat(getWord(deSerialized.getItem(1)), is("second"));
assertThat(deSerialized.getItemCount(), is(2));
}
Aggregations