/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.portal.search.test.util.mappings;
import com.liferay.portal.kernel.search.Field;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.search.analysis.FieldQueryBuilder;
import com.liferay.portal.search.internal.analysis.SimpleKeywordTokenizer;
import com.liferay.portal.search.internal.analysis.SubstringFieldQueryBuilder;
import java.util.Arrays;
/**
* @author André de Oliveira
* @author Rodrigo Paulino
*/
public abstract class BaseSubstringFieldQueryBuilderTestCase
extends BaseFieldQueryBuilderTestCase {
@Override
protected FieldQueryBuilder createFieldQueryBuilder() {
return new SubstringFieldQueryBuilder() {
{
keywordTokenizer = new SimpleKeywordTokenizer();
}
};
}
@Override
protected String getField() {
return Field.TREE_PATH;
}
protected void testBasicWordMatches() throws Exception {
addDocument("Nametag");
addDocument("NA-META-G");
addDocument("Tag Name");
addDocument("TAG1");
assertSearch("ame", 2);
assertSearch("g", 4);
assertSearch("META G", 4);
assertSearch("meta", 2);
assertSearch("META-G", 1);
assertSearch("METAG", 1);
assertSearch("METAG*", 1);
assertSearch("nA mEtA g", 4);
assertSearch("NA-META-G", 1);
assertSearch("name tag", 3);
assertSearch("name", 2);
assertSearch("NaMe*", 2);
assertSearch("nameTAG", 1);
assertSearch("tag 1", 3);
assertSearch("tag name", 3);
assertSearch("tag1", 1);
assertSearch("1", 1);
assertSearch("*METAG", 1);
assertSearch("\"meta\"", 2);
assertSearch("\"tag1\"", 1);
assertSearchNoHits("name-tag");
assertSearchNoHits("tag(142857)");
assertSearchNoHits("tag2");
assertSearchNoHits("\"NA G\"");
assertSearchNoHits("\"na, meta, g\"");
assertSearchNoHits("\"Name Tag\"");
assertSearchNoHits("\"Tag (Name)\"");
assertSearchNoHits("\"tag 1\"");
}
protected void testMultiwordPhrasePrefixes() throws Exception {
addDocument("Name Tags");
addDocument("Names Tab");
addDocument("Tag Names");
addDocument("Tabs Names Tags");
assertSearch("\"name ta*\"", 1);
assertSearch("\"name tag*\"", 1);
assertSearch("\"name tags*\"", 1);
assertSearch("\"names ta*\"", 2);
assertSearch("\"names tab*\"", 1);
assertSearch("\"names tag*\"", 1);
assertSearch("\"names tags*\"", 1);
assertSearch("\"tabs name*\"", 1);
assertSearch("\"tabs names ta*\"", 1);
assertSearch("\"tabs names tag*\"", 1);
assertSearch("\"tabs names tags*\"", 1);
assertSearch("\"tabs names*\"", 1);
assertSearch("\"tag na*\"", 1);
assertSearch("\"tag name*\"", 1);
assertSearch("\"tag names*\"", 1);
assertSearchNoHits("\"name tab*\"");
assertSearchNoHits("\"name tabs*\"");
assertSearchNoHits("\"names tabs*\"");
assertSearchNoHits("\"tab na*\"");
assertSearchNoHits("\"tab names*\"");
assertSearchNoHits("\"tabs na ta*\"");
assertSearchNoHits("\"tabs name ta*\"");
assertSearchNoHits("\"tags na ta*\"");
assertSearchNoHits("\"tags names tabs*\"");
assertSearchNoHits("\"tags names*\"");
assertSearchNoHits("\"zz na*\"");
assertSearchNoHits("\"zz name*\"");
assertSearchNoHits("\"zz names*\"");
assertSearchNoHits("\"zz ta*\"");
assertSearchNoHits("\"zz tab*\"");
assertSearchNoHits("\"zz tabs*\"");
assertSearchNoHits("\"zz tag*\"");
assertSearchNoHits("\"zz tags*\"");
}
protected void testNull() throws Exception {
addDocument("null");
addDocument("anulled");
addDocument("The word null is in this sentence");
addDocument("Ultimate Nullifier");
addDocument("llun");
assertSearch(
"null",
Arrays.asList(
"null", "anulled", "the word null is in this sentence",
"ultimate nullifier"));
}
protected void testNumbers() throws Exception {
addDocument("Nametag5");
addDocument("2Tagname");
addDocument("LETTERS ONLY");
assertSearch("2", 1);
assertSearch("2Tag", 1);
assertSearch("2Tagname", 1);
assertSearch("5", 1);
assertSearch("Name", 2);
assertSearch("Nametag", 1);
assertSearch("Nametag5", 1);
assertSearch("Tagname", 1);
assertSearchNoHits("5Nametag");
assertSearchNoHits("5Tagname");
assertSearchNoHits("Nametag2");
assertSearchNoHits("Nametag9");
assertSearchNoHits("Tagname2");
assertSearchNoHits("Tagname5");
assertSearchNoHits("Tagname9");
}
protected void testPhrases() throws Exception {
addDocument("Names of Tags");
addDocument("More names of tags here");
assertSearch("\"ags her\" ame \"mor\"", 2);
assertSearch("\"ags here\"", 1);
assertSearch("\"ames of tag\" \"here tags\"", 2);
assertSearch("\"ames of tag\"", 2);
assertSearch("\"here tags\" ame \"ore\"", 2);
assertSearch("\"HERE\"", 1);
assertSearch("\"More\"", 1);
assertSearch("\"more\"", 1);
assertSearch("\"ore name\" \"ags her\"", 1);
assertSearch("\"ore name\" \"here tags\"", 1);
assertSearch("\"TAGS\"", 2);
assertSearchNoHits("\" tags \"");
}
protected void testStopwords() throws Exception {
addDocument("Names of Tags");
addDocument("More names of tags");
assertSearch("of", 2);
assertSearch("ags ames", 2);
assertSearch("ames of tags", 2);
}
protected void testSubstrings() throws Exception {
addDocument("Nametag");
addDocument("NA-META-G");
addDocument("Tag Name");
addDocument("TAG1");
assertSearch("me", 3);
assertSearch("me*", 3);
assertSearch("met", 2);
assertSearch("Na", 3);
assertSearch("NA*", 3);
assertSearch("Namet", 1);
assertSearch("namet*", 1);
assertSearch("Ta", 4);
assertSearch("Ta*", 4);
assertSearch("tag", 3);
assertSearch("*me", 3);
assertSearch("*me*", 3);
assertSearch("*met*", 2);
assertSearch("*NA", 3);
assertSearch("*NA*", 3);
assertSearch("*namet", 1);
assertSearch("*namet*", 1);
assertSearch("*Ta", 4);
assertSearch("*Ta*", 4);
}
protected String[] toLowerCase(String[] values) {
String[] clone = values.clone();
StringUtil.lowerCase(clone);
return clone;
}
@Override
protected String[] transformFieldValues(String... values) {
return toLowerCase(values);
}
}