Search in sources :

Example 1 with ExactStringItem

use of com.yahoo.prelude.query.ExactStringItem in project vespa by vespa-engine.

the class YqlParser method instantiateWordItem.

@NonNull
private Item instantiateWordItem(String field, String rawWord, OperatorNode<ExpressionOperator> ast, Class<?> parent, SegmentWhen segmentPolicy, boolean exactMatch, Language language) {
    String wordData = rawWord;
    if (getAnnotation(ast, NFKC, Boolean.class, Boolean.FALSE, "setting for whether to NFKC normalize input data")) {
        // NOTE: If this is set to FALSE (default), we will still NFKC normalize text data
        // during tokenization/segmentation, as that is always turned on also on the indexing side.
        wordData = normalizer.normalize(wordData);
    }
    boolean fromQuery = getAnnotation(ast, IMPLICIT_TRANSFORMS, Boolean.class, Boolean.TRUE, IMPLICIT_TRANSFORMS_DESCRIPTION);
    boolean prefixMatch = getAnnotation(ast, PREFIX, Boolean.class, Boolean.FALSE, "setting for whether to use prefix match of input data");
    boolean suffixMatch = getAnnotation(ast, SUFFIX, Boolean.class, Boolean.FALSE, "setting for whether to use suffix match of input data");
    boolean substrMatch = getAnnotation(ast, SUBSTRING, Boolean.class, Boolean.FALSE, "setting for whether to use substring match of input data");
    Preconditions.checkArgument((prefixMatch ? 1 : 0) + (substrMatch ? 1 : 0) + (suffixMatch ? 1 : 0) < 2, "Only one of prefix, substring and suffix can be set.");
    @NonNull final TaggableItem wordItem;
    if (exactMatch) {
        wordItem = new ExactStringItem(wordData, fromQuery);
    } else if (prefixMatch) {
        wordItem = new PrefixItem(wordData, fromQuery);
    } else if (suffixMatch) {
        wordItem = new SuffixItem(wordData, fromQuery);
    } else if (substrMatch) {
        wordItem = new SubstringItem(wordData, fromQuery);
    } else {
        switch(segmentPolicy) {
            case NEVER:
                wordItem = new WordItem(wordData, fromQuery);
                break;
            case POSSIBLY:
                if (shouldResegmentWord(field, fromQuery)) {
                    wordItem = resegment(field, ast, wordData, fromQuery, parent, language);
                } else {
                    wordItem = new WordItem(wordData, fromQuery);
                }
                break;
            case ALWAYS:
                wordItem = resegment(field, ast, wordData, fromQuery, parent, language);
                break;
            default:
                throw new IllegalArgumentException("Unexpected segmenting rule: " + segmentPolicy);
        }
    }
    if (wordItem instanceof WordItem) {
        prepareWord(field, ast, fromQuery, (WordItem) wordItem);
    }
    if (// mark the language used, unless it's the default
    language != Language.ENGLISH)
        ((Item) wordItem).setLanguage(language);
    return (Item) leafStyleSettings(ast, wordItem);
}
Also used : SuffixItem(com.yahoo.prelude.query.SuffixItem) CompositeItem(com.yahoo.prelude.query.CompositeItem) WordAlternativesItem(com.yahoo.prelude.query.WordAlternativesItem) NullItem(com.yahoo.prelude.query.NullItem) PrefixItem(com.yahoo.prelude.query.PrefixItem) OrItem(com.yahoo.prelude.query.OrItem) PhraseItem(com.yahoo.prelude.query.PhraseItem) TaggableItem(com.yahoo.prelude.query.TaggableItem) SubstringItem(com.yahoo.prelude.query.SubstringItem) AndItem(com.yahoo.prelude.query.AndItem) RankItem(com.yahoo.prelude.query.RankItem) EquivItem(com.yahoo.prelude.query.EquivItem) WeightedSetItem(com.yahoo.prelude.query.WeightedSetItem) PhraseSegmentItem(com.yahoo.prelude.query.PhraseSegmentItem) ExactStringItem(com.yahoo.prelude.query.ExactStringItem) PredicateQueryItem(com.yahoo.prelude.query.PredicateQueryItem) WeakAndItem(com.yahoo.prelude.query.WeakAndItem) ONearItem(com.yahoo.prelude.query.ONearItem) DotProductItem(com.yahoo.prelude.query.DotProductItem) Item(com.yahoo.prelude.query.Item) SuffixItem(com.yahoo.prelude.query.SuffixItem) AndSegmentItem(com.yahoo.prelude.query.AndSegmentItem) SegmentItem(com.yahoo.prelude.query.SegmentItem) IntItem(com.yahoo.prelude.query.IntItem) WandItem(com.yahoo.prelude.query.WandItem) RegExpItem(com.yahoo.prelude.query.RegExpItem) RangeItem(com.yahoo.prelude.query.RangeItem) WordItem(com.yahoo.prelude.query.WordItem) NotItem(com.yahoo.prelude.query.NotItem) NearItem(com.yahoo.prelude.query.NearItem) TaggableItem(com.yahoo.prelude.query.TaggableItem) NonNull(edu.umd.cs.findbugs.annotations.NonNull) SubstringItem(com.yahoo.prelude.query.SubstringItem) WordItem(com.yahoo.prelude.query.WordItem) PrefixItem(com.yahoo.prelude.query.PrefixItem) ExactStringItem(com.yahoo.prelude.query.ExactStringItem) NonNull(edu.umd.cs.findbugs.annotations.NonNull)

Example 2 with ExactStringItem

use of com.yahoo.prelude.query.ExactStringItem in project vespa by vespa-engine.

the class YqlParserTestCase method testRaw.

@Test
public void testRaw() {
    Item root = parse("select foo from bar where baz contains (\"yoni jo dima\");").getRoot();
    assertTrue(root instanceof WordItem);
    assertFalse(root instanceof ExactStringItem);
    assertEquals("yoni jo dima", ((WordItem) root).getWord());
    root = parse("select foo from bar where baz contains ([{\"grammar\":\"raw\"}]\"yoni jo dima\");").getRoot();
    assertTrue(root instanceof WordItem);
    assertFalse(root instanceof ExactStringItem);
    assertEquals("yoni jo dima", ((WordItem) root).getWord());
    root = parse("select foo from bar where userInput(\"yoni jo dima\");").getRoot();
    assertTrue(root instanceof AndItem);
    AndItem andItem = (AndItem) root;
    assertEquals(3, andItem.getItemCount());
    root = parse("select foo from bar where [{\"grammar\":\"raw\"}]userInput(\"yoni jo dima\");").getRoot();
    assertTrue(root instanceof WordItem);
    assertTrue(root instanceof ExactStringItem);
    assertEquals("yoni jo dima", ((WordItem) root).getWord());
}
Also used : WordAlternativesItem(com.yahoo.prelude.query.WordAlternativesItem) ExactStringItem(com.yahoo.prelude.query.ExactStringItem) WeakAndItem(com.yahoo.prelude.query.WeakAndItem) IndexedItem(com.yahoo.prelude.query.IndexedItem) PrefixItem(com.yahoo.prelude.query.PrefixItem) Item(com.yahoo.prelude.query.Item) SuffixItem(com.yahoo.prelude.query.SuffixItem) PhraseItem(com.yahoo.prelude.query.PhraseItem) RegExpItem(com.yahoo.prelude.query.RegExpItem) SubstringItem(com.yahoo.prelude.query.SubstringItem) AndItem(com.yahoo.prelude.query.AndItem) WordItem(com.yahoo.prelude.query.WordItem) WeakAndItem(com.yahoo.prelude.query.WeakAndItem) AndItem(com.yahoo.prelude.query.AndItem) WordItem(com.yahoo.prelude.query.WordItem) ExactStringItem(com.yahoo.prelude.query.ExactStringItem) Test(org.junit.Test)

Aggregations

AndItem (com.yahoo.prelude.query.AndItem)2 ExactStringItem (com.yahoo.prelude.query.ExactStringItem)2 Item (com.yahoo.prelude.query.Item)2 PhraseItem (com.yahoo.prelude.query.PhraseItem)2 PrefixItem (com.yahoo.prelude.query.PrefixItem)2 RegExpItem (com.yahoo.prelude.query.RegExpItem)2 SubstringItem (com.yahoo.prelude.query.SubstringItem)2 SuffixItem (com.yahoo.prelude.query.SuffixItem)2 WeakAndItem (com.yahoo.prelude.query.WeakAndItem)2 WordAlternativesItem (com.yahoo.prelude.query.WordAlternativesItem)2 WordItem (com.yahoo.prelude.query.WordItem)2 AndSegmentItem (com.yahoo.prelude.query.AndSegmentItem)1 CompositeItem (com.yahoo.prelude.query.CompositeItem)1 DotProductItem (com.yahoo.prelude.query.DotProductItem)1 EquivItem (com.yahoo.prelude.query.EquivItem)1 IndexedItem (com.yahoo.prelude.query.IndexedItem)1 IntItem (com.yahoo.prelude.query.IntItem)1 NearItem (com.yahoo.prelude.query.NearItem)1 NotItem (com.yahoo.prelude.query.NotItem)1 NullItem (com.yahoo.prelude.query.NullItem)1