diff --git a/src/main/java/jp/sf/fess/Constants.java b/src/main/java/jp/sf/fess/Constants.java index 6e9980196..e9fc7972c 100644 --- a/src/main/java/jp/sf/fess/Constants.java +++ b/src/main/java/jp/sf/fess/Constants.java @@ -320,4 +320,6 @@ public class Constants extends CoreLibConstants { public static final String ALL_LANGUAGES = "all"; + public static final String DEFAULT_OPERATOR = "defaultOperator"; + } diff --git a/src/main/java/jp/sf/fess/action/IndexAction.java b/src/main/java/jp/sf/fess/action/IndexAction.java index 25d8b386a..e9d5fa915 100644 --- a/src/main/java/jp/sf/fess/action/IndexAction.java +++ b/src/main/java/jp/sf/fess/action/IndexAction.java @@ -226,7 +226,7 @@ public class IndexAction { public String getPagingQuery() { if (pagingQuery == null) { - final StringBuilder buf = new StringBuilder(); + final StringBuilder buf = new StringBuilder(200); if (indexForm.additional != null) { final Set fieldSet = new HashSet(); for (final String additional : indexForm.additional) { @@ -241,6 +241,9 @@ public class IndexAction { if (StringUtil.isNotBlank(indexForm.sort)) { buf.append("&sort=").append(S2Functions.u(indexForm.sort)); } + if (StringUtil.isNotBlank(indexForm.op)) { + buf.append("&op=").append(S2Functions.u(indexForm.op)); + } if (indexForm.lang != null) { final Set langSet = new HashSet(); for (final String lang : indexForm.lang) { @@ -894,6 +897,9 @@ public class IndexAction { if (StringUtil.isNotBlank(indexForm.query)) { queryBuf.append(indexForm.query); } + if (StringUtil.isNotBlank(indexForm.op)) { + request.setAttribute(Constants.DEFAULT_OPERATOR, indexForm.op); + } if (!indexForm.fields.isEmpty()) { for (final Map.Entry entry : indexForm.fields .entrySet()) { diff --git a/src/main/java/jp/sf/fess/form/IndexForm.java b/src/main/java/jp/sf/fess/form/IndexForm.java index ff13c3c84..e6c4540bd 100644 --- a/src/main/java/jp/sf/fess/form/IndexForm.java +++ b/src/main/java/jp/sf/fess/form/IndexForm.java @@ -39,6 +39,9 @@ public class IndexForm implements Serializable { @Maxbytelength(maxbytelength = 1000) public String sort; + @Maxbytelength(maxbytelength = 10) + public String op; + @IntegerType public String start; diff --git a/src/main/java/jp/sf/fess/helper/QueryHelper.java b/src/main/java/jp/sf/fess/helper/QueryHelper.java index a4106a717..0c8e01d4a 100644 --- a/src/main/java/jp/sf/fess/helper/QueryHelper.java +++ b/src/main/java/jp/sf/fess/helper/QueryHelper.java @@ -326,7 +326,7 @@ public class QueryHelper implements Serializable { final StringBuilder queryBuf = new StringBuilder(255); final List notOperatorList = new ArrayList(); - String defaultOperator = getDefaultOperator(); + final String defaultOperator = getDefaultOperator(); String operator = defaultOperator; boolean notOperatorFlag = false; int queryOperandCount = 0; @@ -798,7 +798,7 @@ public class QueryHelper implements Serializable { final StringBuilder queryBuf = new StringBuilder(255); final List notOperatorList = new ArrayList(); - String defaultOperator = getDefaultOperator(); + final String defaultOperator = getDefaultOperator(); String operator = defaultOperator; boolean notOperatorFlag = false; int queryOperandCount = 0; @@ -1464,6 +1464,16 @@ public class QueryHelper implements Serializable { } protected String getDefaultOperator() { + final HttpServletRequest request = RequestUtil.getRequest(); + if (request != null) { + final String defaultOperator = (String) request + .getAttribute(Constants.DEFAULT_OPERATOR); + if (AND.equalsIgnoreCase(defaultOperator)) { + return _AND_; + } else if (OR.equalsIgnoreCase(defaultOperator)) { + return _OR_; + } + } return DEFAULT_OPERATOR; } diff --git a/src/test/java/jp/sf/fess/helper/QueryHelperTest.java b/src/test/java/jp/sf/fess/helper/QueryHelperTest.java index 6686daf70..44aad3872 100644 --- a/src/test/java/jp/sf/fess/helper/QueryHelperTest.java +++ b/src/test/java/jp/sf/fess/helper/QueryHelperTest.java @@ -41,228 +41,271 @@ public class QueryHelperTest extends S2TestCase { } public void test_build() { - assertEquals("", queryHelper.buildQuery("").getQuery()); + for (String op : new String[] { "AND", "OR" }) { + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); + assertEquals("", queryHelper.buildQuery("").getQuery()); - assertEquals("title:QUERY OR content:QUERY", - queryHelper.buildQuery("QUERY").getQuery()); - assertEquals("title:QUERY OR content:QUERY", - queryHelper.buildQuery("QUERY ").getQuery()); - assertEquals("title:QUERY OR content:QUERY", - queryHelper.buildQuery(" QUERY").getQuery()); + assertEquals("title:QUERY OR content:QUERY", queryHelper + .buildQuery("QUERY").getQuery()); + assertEquals("title:QUERY OR content:QUERY", queryHelper + .buildQuery("QUERY ").getQuery()); + assertEquals("title:QUERY OR content:QUERY", queryHelper + .buildQuery(" QUERY").getQuery()); - assertEquals( - "(title:QUERY1 OR content:QUERY1) (title:QUERY2 OR content:QUERY2)", - queryHelper.buildQuery("QUERY1 QUERY2").getQuery()); - assertEquals( - "(title:QUERY1 OR content:QUERY1) (title:QUERY2 OR content:QUERY2)", - queryHelper.buildQuery("QUERY1 QUERY2 ").getQuery()); - assertEquals( - "(title:QUERY1 OR content:QUERY1) (title:QUERY2 OR content:QUERY2)", - queryHelper.buildQuery(" QUERY1 QUERY2").getQuery()); + assertEquals("(title:QUERY1 OR content:QUERY1) " + op + + " (title:QUERY2 OR content:QUERY2)", queryHelper + .buildQuery("QUERY1 QUERY2").getQuery()); + assertEquals("(title:QUERY1 OR content:QUERY1) " + op + + " (title:QUERY2 OR content:QUERY2)", queryHelper + .buildQuery("QUERY1 QUERY2 ").getQuery()); + assertEquals("(title:QUERY1 OR content:QUERY1) " + op + + " (title:QUERY2 OR content:QUERY2)", queryHelper + .buildQuery(" QUERY1 QUERY2").getQuery()); - assertEquals("title:QUERY1\\ QUERY2 OR content:QUERY1\\ QUERY2", - queryHelper.buildQuery("\"QUERY1 QUERY2\"").getQuery()); - assertEquals("title:QUERY1\\ QUERY2 OR content:QUERY1\\ QUERY2", - queryHelper.buildQuery("\"QUERY1 QUERY2\" ").getQuery()); - assertEquals("title:QUERY1\\ QUERY2 OR content:QUERY1\\ QUERY2", - queryHelper.buildQuery(" \"QUERY1 QUERY2\"").getQuery()); - - assertEquals( - "(title:QUERY1\\ QUERY2 OR content:QUERY1\\ QUERY2) (title:QUERY3 OR content:QUERY3)", - queryHelper.buildQuery("\"QUERY1 QUERY2\" QUERY3").getQuery()); + assertEquals("title:QUERY1\\ QUERY2 OR content:QUERY1\\ QUERY2", + queryHelper.buildQuery("\"QUERY1 QUERY2\"").getQuery()); + assertEquals("title:QUERY1\\ QUERY2 OR content:QUERY1\\ QUERY2", + queryHelper.buildQuery("\"QUERY1 QUERY2\" ").getQuery()); + assertEquals("title:QUERY1\\ QUERY2 OR content:QUERY1\\ QUERY2", + queryHelper.buildQuery(" \"QUERY1 QUERY2\"").getQuery()); + assertEquals("(title:QUERY1\\ QUERY2 OR content:QUERY1\\ QUERY2) " + + op + " (title:QUERY3 OR content:QUERY3)", queryHelper + .buildQuery("\"QUERY1 QUERY2\" QUERY3").getQuery()); + } } public void test_build_fullwidthSpace() { + for (String op : new String[] { "AND", "OR" }) { + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); - assertEquals( - "(title:QUERY1 OR content:QUERY1) (title:QUERY2 OR content:QUERY2)", - queryHelper.buildQuery("QUERY1\u3000QUERY2").getQuery()); - assertEquals( - "(title:QUERY1 OR content:QUERY1) (title:QUERY2 OR content:QUERY2)", - queryHelper.buildQuery("QUERY1\u3000QUERY2\u3000").getQuery()); - assertEquals( - "(title:QUERY1 OR content:QUERY1) (title:QUERY2 OR content:QUERY2)", - queryHelper.buildQuery("\u3000QUERY1\u3000QUERY2").getQuery()); + assertEquals("(title:QUERY1 OR content:QUERY1) " + op + + " (title:QUERY2 OR content:QUERY2)", queryHelper + .buildQuery("QUERY1\u3000QUERY2").getQuery()); + assertEquals("(title:QUERY1 OR content:QUERY1) " + op + + " (title:QUERY2 OR content:QUERY2)", queryHelper + .buildQuery("QUERY1\u3000QUERY2\u3000").getQuery()); + assertEquals("(title:QUERY1 OR content:QUERY1) " + op + + " (title:QUERY2 OR content:QUERY2)", queryHelper + .buildQuery("\u3000QUERY1\u3000QUERY2").getQuery()); - assertEquals( - "title:QUERY1\\\u3000QUERY2 OR content:QUERY1\\\u3000QUERY2", - queryHelper.buildQuery("\"QUERY1\u3000QUERY2\"").getQuery()); - - assertEquals( - "(title:QUERY1\\\u3000QUERY2 OR content:QUERY1\\\u3000QUERY2) (title:QUERY3 OR content:QUERY3)", - queryHelper.buildQuery("\"QUERY1\u3000QUERY2\"\u3000QUERY3") - .getQuery()); + assertEquals( + "title:QUERY1\\\u3000QUERY2 OR content:QUERY1\\\u3000QUERY2", + queryHelper.buildQuery("\"QUERY1\u3000QUERY2\"").getQuery()); + assertEquals( + "(title:QUERY1\\\u3000QUERY2 OR content:QUERY1\\\u3000QUERY2) " + + op + " (title:QUERY3 OR content:QUERY3)", + queryHelper + .buildQuery("\"QUERY1\u3000QUERY2\"\u3000QUERY3") + .getQuery()); + } } public void test_build_prefix() { - assertEquals("mimetype:QUERY1", - queryHelper.buildQuery("mimetype:QUERY1").getQuery()); - assertEquals("mimetype:QUERY1 (title:QUERY2 OR content:QUERY2)", - queryHelper.buildQuery("mimetype:QUERY1 QUERY2").getQuery()); - assertEquals( - "mimetype:QUERY1 (title:QUERY2 OR content:QUERY2) (title:QUERY3 OR content:QUERY3)", - queryHelper.buildQuery("mimetype:QUERY1 QUERY2 QUERY3") - .getQuery()); - assertEquals( - "mimetype:QUERY1 host:QUERY2 (title:QUERY3 OR content:QUERY3)", - queryHelper.buildQuery("mimetype:QUERY1 host:QUERY2 QUERY3") - .getQuery()); - assertEquals( - "mimetype:QUERY1\\ QUERY2 (title:QUERY3 OR content:QUERY3)", - queryHelper.buildQuery("mimetype:\"QUERY1 QUERY2\" QUERY3") - .getQuery()); - + for (String op : new String[] { "AND", "OR" }) { + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); + assertEquals("mimetype:QUERY1", + queryHelper.buildQuery("mimetype:QUERY1").getQuery()); + assertEquals("mimetype:QUERY1 " + op + + " (title:QUERY2 OR content:QUERY2)", queryHelper + .buildQuery("mimetype:QUERY1 QUERY2").getQuery()); + assertEquals("mimetype:QUERY1 " + op + + " (title:QUERY2 OR content:QUERY2) " + op + + " (title:QUERY3 OR content:QUERY3)", queryHelper + .buildQuery("mimetype:QUERY1 QUERY2 QUERY3").getQuery()); + assertEquals("mimetype:QUERY1 " + op + " host:QUERY2 " + op + + " (title:QUERY3 OR content:QUERY3)", queryHelper + .buildQuery("mimetype:QUERY1 host:QUERY2 QUERY3") + .getQuery()); + assertEquals("mimetype:QUERY1\\ QUERY2 " + op + + " (title:QUERY3 OR content:QUERY3)", queryHelper + .buildQuery("mimetype:\"QUERY1 QUERY2\" QUERY3").getQuery()); + } } public void test_build_prefix_unknown() { - assertEquals("title:site\\: OR content:site\\:", queryHelper - .buildQuery("site:").getQuery()); - assertEquals("title:hoge\\:QUERY1 OR content:hoge\\:QUERY1", - queryHelper.buildQuery("hoge:QUERY1").getQuery()); - assertEquals( - "(title:hoge\\:QUERY1 OR content:hoge\\:QUERY1) (title:QUERY2 OR content:QUERY2)", - queryHelper.buildQuery("hoge:QUERY1 QUERY2").getQuery()); - assertEquals( - "(title:hoge\\:QUERY1 OR content:hoge\\:QUERY1) (title:QUERY2 OR content:QUERY2) (title:QUERY3 OR content:QUERY3)", - queryHelper.buildQuery("hoge:QUERY1 QUERY2 QUERY3").getQuery()); - assertEquals( - "(title:hoge\\:QUERY1 OR content:hoge\\:QUERY1) host:QUERY2 (title:QUERY3 OR content:QUERY3)", - queryHelper.buildQuery("hoge:QUERY1 host:QUERY2 QUERY3") - .getQuery()); - assertEquals( - "(title:hoge\\:QUERY1\\ QUERY2 OR content:hoge\\:QUERY1\\ QUERY2) (title:QUERY3 OR content:QUERY3)", - queryHelper.buildQuery("hoge:\"QUERY1 QUERY2\" QUERY3") - .getQuery()); - + for (String op : new String[] { "AND", "OR" }) { + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); + assertEquals("title:site\\: OR content:site\\:", queryHelper + .buildQuery("site:").getQuery()); + assertEquals("title:hoge\\:QUERY1 OR content:hoge\\:QUERY1", + queryHelper.buildQuery("hoge:QUERY1").getQuery()); + assertEquals("(title:hoge\\:QUERY1 OR content:hoge\\:QUERY1) " + op + + " (title:QUERY2 OR content:QUERY2)", queryHelper + .buildQuery("hoge:QUERY1 QUERY2").getQuery()); + assertEquals("(title:hoge\\:QUERY1 OR content:hoge\\:QUERY1) " + op + + " (title:QUERY2 OR content:QUERY2) " + op + + " (title:QUERY3 OR content:QUERY3)", queryHelper + .buildQuery("hoge:QUERY1 QUERY2 QUERY3").getQuery()); + assertEquals("(title:hoge\\:QUERY1 OR content:hoge\\:QUERY1) " + op + + " host:QUERY2 " + op + + " (title:QUERY3 OR content:QUERY3)", queryHelper + .buildQuery("hoge:QUERY1 host:QUERY2 QUERY3").getQuery()); + assertEquals( + "(title:hoge\\:QUERY1\\ QUERY2 OR content:hoge\\:QUERY1\\ QUERY2) " + + op + " (title:QUERY3 OR content:QUERY3)", + queryHelper.buildQuery("hoge:\"QUERY1 QUERY2\" QUERY3") + .getQuery()); + } } public void test_build_roleType() { - queryHelper.roleQueryHelper = new RoleQueryHelper() { - @Override - public Set build() { - final Set list = new LinkedHashSet<>(); - list.add("guest"); - return list; - } - }; + for (String op : new String[] { "AND", "OR" }) { + queryHelper.roleQueryHelper = new RoleQueryHelper() { + @Override + public Set build() { + final Set list = new LinkedHashSet<>(); + list.add("guest"); + return list; + } + }; - assertEquals("", queryHelper.build("", true).getQuery()); + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); + assertEquals("", queryHelper.build("", true).getQuery()); - assertEquals("title:QUERY OR content:QUERY", - queryHelper.build("QUERY", true).getQuery()); - assertEquals("role:guest", queryHelper.build("QUERY", true) - .getFilterQueries()[0]); + assertEquals("title:QUERY OR content:QUERY", + queryHelper.build("QUERY", true).getQuery()); + assertEquals("role:guest", queryHelper.build("QUERY", true) + .getFilterQueries()[0]); - assertEquals( - "(title:QUERY1 OR content:QUERY1) (title:QUERY2 OR content:QUERY2)", - queryHelper.build("QUERY1 QUERY2", true).getQuery()); - assertEquals("role:guest", queryHelper.build("QUERY1 QUERY2", true) - .getFilterQueries()[0]); + assertEquals("(title:QUERY1 OR content:QUERY1) " + op + + " (title:QUERY2 OR content:QUERY2)", + queryHelper.build("QUERY1 QUERY2", true).getQuery()); + assertEquals("role:guest", queryHelper.build("QUERY1 QUERY2", true) + .getFilterQueries()[0]); - queryHelper.roleQueryHelper = new RoleQueryHelper() { - @Override - public Set build() { - final Set list = new LinkedHashSet<>(); - list.add("guest"); - list.add("admin"); - return list; - } - }; + queryHelper.roleQueryHelper = new RoleQueryHelper() { + @Override + public Set build() { + final Set list = new LinkedHashSet<>(); + list.add("guest"); + list.add("admin"); + return list; + } + }; - assertEquals("title:QUERY OR content:QUERY", - queryHelper.build("QUERY", true).getQuery()); - assertEquals("role:guest OR role:admin", - queryHelper.build("QUERY", true).getFilterQueries()[0]); + assertEquals("title:QUERY OR content:QUERY", + queryHelper.build("QUERY", true).getQuery()); + assertEquals("role:guest OR role:admin", + queryHelper.build("QUERY", true).getFilterQueries()[0]); - assertEquals( - "(title:QUERY1 OR content:QUERY1) (title:QUERY2 OR content:QUERY2)", - queryHelper.build("QUERY1 QUERY2", true).getQuery()); - assertEquals("role:guest OR role:admin", - queryHelper.build("QUERY1 QUERY2", true).getFilterQueries()[0]); + assertEquals("(title:QUERY1 OR content:QUERY1) " + op + + " (title:QUERY2 OR content:QUERY2)", + queryHelper.build("QUERY1 QUERY2", true).getQuery()); + assertEquals( + "role:guest OR role:admin", + queryHelper.build("QUERY1 QUERY2", true).getFilterQueries()[0]); + } } public void test_sortField() { String query; SearchQuery searchQuery; - query = ""; - searchQuery = queryHelper.buildQuery(query); - assertEquals("", searchQuery.getQuery()); - assertEquals(0, searchQuery.getSortFields().length); + for (String op : new String[] { "AND", "OR" }) { + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); + query = ""; + searchQuery = queryHelper.buildQuery(query); + assertEquals("", searchQuery.getQuery()); + assertEquals(0, searchQuery.getSortFields().length); - query = "sort:contentLength"; - searchQuery = queryHelper.buildQuery(query); - assertEquals("", searchQuery.getQuery()); - assertEquals(1, searchQuery.getSortFields().length); - assertEquals("contentLength", searchQuery.getSortFields()[0].getField()); - assertEquals(Constants.ASC, searchQuery.getSortFields()[0].getOrder()); + query = "sort:contentLength"; + searchQuery = queryHelper.buildQuery(query); + assertEquals("", searchQuery.getQuery()); + assertEquals(1, searchQuery.getSortFields().length); + assertEquals("contentLength", + searchQuery.getSortFields()[0].getField()); + assertEquals(Constants.ASC, + searchQuery.getSortFields()[0].getOrder()); - query = "sort:contentLength.desc"; - searchQuery = queryHelper.buildQuery(query); - assertEquals("", searchQuery.getQuery()); - assertEquals(1, searchQuery.getSortFields().length); - assertEquals("contentLength", searchQuery.getSortFields()[0].getField()); - assertEquals(Constants.DESC, searchQuery.getSortFields()[0].getOrder()); + query = "sort:contentLength.desc"; + searchQuery = queryHelper.buildQuery(query); + assertEquals("", searchQuery.getQuery()); + assertEquals(1, searchQuery.getSortFields().length); + assertEquals("contentLength", + searchQuery.getSortFields()[0].getField()); + assertEquals(Constants.DESC, + searchQuery.getSortFields()[0].getOrder()); - query = "sort:contentLength.asc,lastModified"; - searchQuery = queryHelper.buildQuery(query); - assertEquals("", searchQuery.getQuery()); - assertEquals(2, searchQuery.getSortFields().length); - assertEquals("contentLength", searchQuery.getSortFields()[0].getField()); - assertEquals(Constants.ASC, searchQuery.getSortFields()[0].getOrder()); - assertEquals("lastModified", searchQuery.getSortFields()[1].getField()); - assertEquals(Constants.ASC, searchQuery.getSortFields()[1].getOrder()); + query = "sort:contentLength.asc,lastModified"; + searchQuery = queryHelper.buildQuery(query); + assertEquals("", searchQuery.getQuery()); + assertEquals(2, searchQuery.getSortFields().length); + assertEquals("contentLength", + searchQuery.getSortFields()[0].getField()); + assertEquals(Constants.ASC, + searchQuery.getSortFields()[0].getOrder()); + assertEquals("lastModified", + searchQuery.getSortFields()[1].getField()); + assertEquals(Constants.ASC, + searchQuery.getSortFields()[1].getOrder()); - query = "QUERY sort:contentLength"; - searchQuery = queryHelper.buildQuery(query); - assertEquals("title:QUERY OR content:QUERY", searchQuery.getQuery()); - assertEquals(1, searchQuery.getSortFields().length); - assertEquals("contentLength", searchQuery.getSortFields()[0].getField()); - assertEquals(Constants.ASC, searchQuery.getSortFields()[0].getOrder()); + query = "QUERY sort:contentLength"; + searchQuery = queryHelper.buildQuery(query); + assertEquals("title:QUERY OR content:QUERY", searchQuery.getQuery()); + assertEquals(1, searchQuery.getSortFields().length); + assertEquals("contentLength", + searchQuery.getSortFields()[0].getField()); + assertEquals(Constants.ASC, + searchQuery.getSortFields()[0].getOrder()); - query = "QUERY sort:contentLength.desc"; - searchQuery = queryHelper.buildQuery(query); - assertEquals("title:QUERY OR content:QUERY", searchQuery.getQuery()); - assertEquals(1, searchQuery.getSortFields().length); - assertEquals("contentLength", searchQuery.getSortFields()[0].getField()); - assertEquals(Constants.DESC, searchQuery.getSortFields()[0].getOrder()); + query = "QUERY sort:contentLength.desc"; + searchQuery = queryHelper.buildQuery(query); + assertEquals("title:QUERY OR content:QUERY", searchQuery.getQuery()); + assertEquals(1, searchQuery.getSortFields().length); + assertEquals("contentLength", + searchQuery.getSortFields()[0].getField()); + assertEquals(Constants.DESC, + searchQuery.getSortFields()[0].getOrder()); - query = "QUERY sort:contentLength.asc,lastModified"; - searchQuery = queryHelper.buildQuery(query); - assertEquals("title:QUERY OR content:QUERY", searchQuery.getQuery()); - assertEquals(2, searchQuery.getSortFields().length); - assertEquals("contentLength", searchQuery.getSortFields()[0].getField()); - assertEquals(Constants.ASC, searchQuery.getSortFields()[0].getOrder()); - assertEquals("lastModified", searchQuery.getSortFields()[1].getField()); - assertEquals(Constants.ASC, searchQuery.getSortFields()[1].getOrder()); + query = "QUERY sort:contentLength.asc,lastModified"; + searchQuery = queryHelper.buildQuery(query); + assertEquals("title:QUERY OR content:QUERY", searchQuery.getQuery()); + assertEquals(2, searchQuery.getSortFields().length); + assertEquals("contentLength", + searchQuery.getSortFields()[0].getField()); + assertEquals(Constants.ASC, + searchQuery.getSortFields()[0].getOrder()); + assertEquals("lastModified", + searchQuery.getSortFields()[1].getField()); + assertEquals(Constants.ASC, + searchQuery.getSortFields()[1].getOrder()); - query = "QUERY mimetype:QUERY1 sort:contentLength"; - searchQuery = queryHelper.buildQuery(query); - assertEquals("(title:QUERY OR content:QUERY) mimetype:QUERY1", - searchQuery.getQuery()); - assertEquals(1, searchQuery.getSortFields().length); - assertEquals("contentLength", searchQuery.getSortFields()[0].getField()); - assertEquals(Constants.ASC, searchQuery.getSortFields()[0].getOrder()); + query = "QUERY mimetype:QUERY1 sort:contentLength"; + searchQuery = queryHelper.buildQuery(query); + assertEquals("(title:QUERY OR content:QUERY) " + op + + " mimetype:QUERY1", searchQuery.getQuery()); + assertEquals(1, searchQuery.getSortFields().length); + assertEquals("contentLength", + searchQuery.getSortFields()[0].getField()); + assertEquals(Constants.ASC, + searchQuery.getSortFields()[0].getOrder()); - query = "QUERY sort:contentLength.desc mimetype:QUERY1"; - searchQuery = queryHelper.buildQuery(query); - assertEquals("(title:QUERY OR content:QUERY) mimetype:QUERY1", - searchQuery.getQuery()); - assertEquals(1, searchQuery.getSortFields().length); - assertEquals("contentLength", searchQuery.getSortFields()[0].getField()); - assertEquals(Constants.DESC, searchQuery.getSortFields()[0].getOrder()); + query = "QUERY sort:contentLength.desc mimetype:QUERY1"; + searchQuery = queryHelper.buildQuery(query); + assertEquals("(title:QUERY OR content:QUERY) " + op + + " mimetype:QUERY1", searchQuery.getQuery()); + assertEquals(1, searchQuery.getSortFields().length); + assertEquals("contentLength", + searchQuery.getSortFields()[0].getField()); + assertEquals(Constants.DESC, + searchQuery.getSortFields()[0].getOrder()); - query = "QUERY sort:contentLength.asc,lastModified mimetype:QUERY1"; - searchQuery = queryHelper.buildQuery(query); - assertEquals("(title:QUERY OR content:QUERY) mimetype:QUERY1", - searchQuery.getQuery()); - assertEquals(2, searchQuery.getSortFields().length); - assertEquals("contentLength", searchQuery.getSortFields()[0].getField()); - assertEquals(Constants.ASC, searchQuery.getSortFields()[0].getOrder()); - assertEquals("lastModified", searchQuery.getSortFields()[1].getField()); - assertEquals(Constants.ASC, searchQuery.getSortFields()[1].getOrder()); + query = "QUERY sort:contentLength.asc,lastModified mimetype:QUERY1"; + searchQuery = queryHelper.buildQuery(query); + assertEquals("(title:QUERY OR content:QUERY) " + op + + " mimetype:QUERY1", searchQuery.getQuery()); + assertEquals(2, searchQuery.getSortFields().length); + assertEquals("contentLength", + searchQuery.getSortFields()[0].getField()); + assertEquals(Constants.ASC, + searchQuery.getSortFields()[0].getOrder()); + assertEquals("lastModified", + searchQuery.getSortFields()[1].getField()); + assertEquals(Constants.ASC, + searchQuery.getSortFields()[1].getOrder()); + } } public void test_sortField_invalid() { @@ -288,277 +331,295 @@ public class QueryHelperTest extends S2TestCase { } public void test_wildcardSearches() { - // * + for (String op : new String[] { "AND", "OR" }) { + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); + // * - assertEquals("title:\\* OR content:\\*", queryHelper.buildQuery("*") - .getQuery()); - assertEquals("title:QUERY* OR content:QUERY*", - queryHelper.buildQuery("QUERY* ").getQuery()); - assertEquals("title:Q*ERY OR content:Q*ERY", - queryHelper.buildQuery(" Q*ERY").getQuery()); + assertEquals("title:\\* OR content:\\*", queryHelper + .buildQuery("*").getQuery()); + assertEquals("title:QUERY* OR content:QUERY*", queryHelper + .buildQuery("QUERY* ").getQuery()); + assertEquals("title:Q*ERY OR content:Q*ERY", queryHelper + .buildQuery(" Q*ERY").getQuery()); - assertEquals( - "(title:Q*ERY1 OR content:Q*ERY1) (title:Q*ERY2 OR content:Q*ERY2)", - queryHelper.buildQuery("Q*ERY1 Q*ERY2").getQuery()); + assertEquals("(title:Q*ERY1 OR content:Q*ERY1) " + op + + " (title:Q*ERY2 OR content:Q*ERY2)", queryHelper + .buildQuery("Q*ERY1 Q*ERY2").getQuery()); - assertEquals("title:Q*ERY1\\ Q*ERY2 OR content:Q*ERY1\\ Q*ERY2", - queryHelper.buildQuery("\"Q*ERY1 Q*ERY2\"").getQuery()); + assertEquals("title:Q*ERY1\\ Q*ERY2 OR content:Q*ERY1\\ Q*ERY2", + queryHelper.buildQuery("\"Q*ERY1 Q*ERY2\"").getQuery()); - assertEquals( - "(title:Q*ERY1\\ Q*ERY2 OR content:Q*ERY1\\ Q*ERY2) (title:Q*ERY3 OR content:Q*ERY3)", - queryHelper.buildQuery("\"Q*ERY1 Q*ERY2\" Q*ERY3").getQuery()); + assertEquals("(title:Q*ERY1\\ Q*ERY2 OR content:Q*ERY1\\ Q*ERY2) " + + op + " (title:Q*ERY3 OR content:Q*ERY3)", queryHelper + .buildQuery("\"Q*ERY1 Q*ERY2\" Q*ERY3").getQuery()); - assertEquals("mimetype:QUERY1*", - queryHelper.buildQuery("mimetype:QUERY1*").getQuery()); - assertEquals("mimetype:QUERY1* (title:QUERY2 OR content:QUERY2)", - queryHelper.buildQuery("mimetype:QUERY1* QUERY2").getQuery()); + assertEquals("mimetype:QUERY1*", + queryHelper.buildQuery("mimetype:QUERY1*").getQuery()); + assertEquals("mimetype:QUERY1* " + op + + " (title:QUERY2 OR content:QUERY2)", queryHelper + .buildQuery("mimetype:QUERY1* QUERY2").getQuery()); - // ? + // ? - assertEquals("title:\\? OR content:\\?", queryHelper.buildQuery("?") - .getQuery()); - assertEquals("title:QUERY? OR content:QUERY?", - queryHelper.buildQuery("QUERY? ").getQuery()); - assertEquals("title:Q?ERY OR content:Q?ERY", - queryHelper.buildQuery(" Q?ERY").getQuery()); + assertEquals("title:\\? OR content:\\?", queryHelper + .buildQuery("?").getQuery()); + assertEquals("title:QUERY? OR content:QUERY?", queryHelper + .buildQuery("QUERY? ").getQuery()); + assertEquals("title:Q?ERY OR content:Q?ERY", queryHelper + .buildQuery(" Q?ERY").getQuery()); - assertEquals( - "(title:Q?ERY1 OR content:Q?ERY1) (title:Q?ERY2 OR content:Q?ERY2)", - queryHelper.buildQuery("Q?ERY1 Q?ERY2").getQuery()); + assertEquals("(title:Q?ERY1 OR content:Q?ERY1) " + op + + " (title:Q?ERY2 OR content:Q?ERY2)", queryHelper + .buildQuery("Q?ERY1 Q?ERY2").getQuery()); - assertEquals("title:Q?ERY1\\ Q?ERY2 OR content:Q?ERY1\\ Q?ERY2", - queryHelper.buildQuery("\"Q?ERY1 Q?ERY2\"").getQuery()); + assertEquals("title:Q?ERY1\\ Q?ERY2 OR content:Q?ERY1\\ Q?ERY2", + queryHelper.buildQuery("\"Q?ERY1 Q?ERY2\"").getQuery()); - assertEquals( - "(title:Q?ERY1\\ Q?ERY2 OR content:Q?ERY1\\ Q?ERY2) (title:Q?ERY3 OR content:Q?ERY3)", - queryHelper.buildQuery("\"Q?ERY1 Q?ERY2\" Q?ERY3").getQuery()); + assertEquals("(title:Q?ERY1\\ Q?ERY2 OR content:Q?ERY1\\ Q?ERY2) " + + op + " (title:Q?ERY3 OR content:Q?ERY3)", queryHelper + .buildQuery("\"Q?ERY1 Q?ERY2\" Q?ERY3").getQuery()); - assertEquals("mimetype:QUERY1?", - queryHelper.buildQuery("mimetype:QUERY1?").getQuery()); - assertEquals("mimetype:QUERY1? (title:QUERY2 OR content:QUERY2)", - queryHelper.buildQuery("mimetype:QUERY1? QUERY2").getQuery()); + assertEquals("mimetype:QUERY1?", + queryHelper.buildQuery("mimetype:QUERY1?").getQuery()); + assertEquals("mimetype:QUERY1? " + op + + " (title:QUERY2 OR content:QUERY2)", queryHelper + .buildQuery("mimetype:QUERY1? QUERY2").getQuery()); + } } public void test_fuzzySearches() { - // ~ + for (String op : new String[] { "AND", "OR" }) { + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); + // ~ - assertEquals("title:QUERY~ OR content:QUERY~", - queryHelper.buildQuery("QUERY~").getQuery()); - assertEquals( - "(title:QUERY1~ OR content:QUERY1~) (title:QUERY2 OR content:QUERY2)", - queryHelper.buildQuery("QUERY1~ QUERY2").getQuery()); - assertEquals( - "(title:QUERY1~ OR content:QUERY1~) (title:QUERY2~ OR content:QUERY2~)", - queryHelper.buildQuery("QUERY1~ QUERY2~").getQuery()); + assertEquals("title:QUERY~ OR content:QUERY~", queryHelper + .buildQuery("QUERY~").getQuery()); + assertEquals("(title:QUERY1~ OR content:QUERY1~) " + op + + " (title:QUERY2 OR content:QUERY2)", queryHelper + .buildQuery("QUERY1~ QUERY2").getQuery()); + assertEquals("(title:QUERY1~ OR content:QUERY1~) " + op + + " (title:QUERY2~ OR content:QUERY2~)", queryHelper + .buildQuery("QUERY1~ QUERY2~").getQuery()); - assertEquals("mimetype:QUERY1~", - queryHelper.buildQuery("mimetype:QUERY1~").getQuery()); - assertEquals("mimetype:QUERY1~ (title:QUERY2 OR content:QUERY2)", - queryHelper.buildQuery("mimetype:QUERY1~ QUERY2").getQuery()); + assertEquals("mimetype:QUERY1~", + queryHelper.buildQuery("mimetype:QUERY1~").getQuery()); + assertEquals("mimetype:QUERY1~ " + op + + " (title:QUERY2 OR content:QUERY2)", queryHelper + .buildQuery("mimetype:QUERY1~ QUERY2").getQuery()); - assertEquals("title:QUERY1\\ QUERY2~ OR content:QUERY1\\ QUERY2~", - queryHelper.buildQuery("\"QUERY1 QUERY2\"~").getQuery()); - assertEquals("title:QUERY1~ OR content:QUERY1~", queryHelper - .buildQuery("\"QUERY1~\"").getQuery()); + assertEquals("title:QUERY1\\ QUERY2~ OR content:QUERY1\\ QUERY2~", + queryHelper.buildQuery("\"QUERY1 QUERY2\"~").getQuery()); + assertEquals("title:QUERY1~ OR content:QUERY1~", queryHelper + .buildQuery("\"QUERY1~\"").getQuery()); - // ~0.8 + // ~0.8 - assertEquals("title:QUERY~0.8 OR content:QUERY~0.8", queryHelper - .buildQuery("QUERY~0.8").getQuery()); - assertEquals( - "(title:QUERY1~0.8 OR content:QUERY1~0.8) (title:QUERY2 OR content:QUERY2)", - queryHelper.buildQuery("QUERY1~0.8 QUERY2").getQuery()); - assertEquals( - "(title:QUERY1~0.5 OR content:QUERY1~0.5) (title:QUERY2~0.8 OR content:QUERY2~0.8)", - queryHelper.buildQuery("QUERY1~0.5 QUERY2~0.8").getQuery()); + assertEquals("title:QUERY~0.8 OR content:QUERY~0.8", queryHelper + .buildQuery("QUERY~0.8").getQuery()); + assertEquals("(title:QUERY1~0.8 OR content:QUERY1~0.8) " + op + + " (title:QUERY2 OR content:QUERY2)", queryHelper + .buildQuery("QUERY1~0.8 QUERY2").getQuery()); + assertEquals("(title:QUERY1~0.5 OR content:QUERY1~0.5) " + op + + " (title:QUERY2~0.8 OR content:QUERY2~0.8)", queryHelper + .buildQuery("QUERY1~0.5 QUERY2~0.8").getQuery()); - assertEquals("mimetype:QUERY1~0.8", - queryHelper.buildQuery("mimetype:QUERY1~0.8").getQuery()); - assertEquals("mimetype:QUERY1~0.8 (title:QUERY2 OR content:QUERY2)", - queryHelper.buildQuery("mimetype:QUERY1~0.8 QUERY2").getQuery()); + assertEquals("mimetype:QUERY1~0.8", + queryHelper.buildQuery("mimetype:QUERY1~0.8").getQuery()); + assertEquals("mimetype:QUERY1~0.8 " + op + + " (title:QUERY2 OR content:QUERY2)", queryHelper + .buildQuery("mimetype:QUERY1~0.8 QUERY2").getQuery()); - assertEquals( - "title:QUERY1\\ QUERY2~0.8 OR content:QUERY1\\ QUERY2~0.8", - queryHelper.buildQuery("\"QUERY1 QUERY2\"~0.8").getQuery()); - assertEquals("title:QUERY1~0.8 OR content:QUERY1~0.8", queryHelper - .buildQuery("\"QUERY1~0.8\"").getQuery()); - - assertEquals("title:QUERY1~0.8 OR content:QUERY1~0.8", queryHelper - .buildQuery("\"QUERY1~0.8a\"").getQuery()); - assertEquals("title:QUERY1~ OR content:QUERY1~", queryHelper - .buildQuery("\"QUERY1~a\"").getQuery()); + assertEquals( + "title:QUERY1\\ QUERY2~0.8 OR content:QUERY1\\ QUERY2~0.8", + queryHelper.buildQuery("\"QUERY1 QUERY2\"~0.8").getQuery()); + assertEquals("title:QUERY1~0.8 OR content:QUERY1~0.8", queryHelper + .buildQuery("\"QUERY1~0.8\"").getQuery()); + assertEquals("title:QUERY1~0.8 OR content:QUERY1~0.8", queryHelper + .buildQuery("\"QUERY1~0.8a\"").getQuery()); + assertEquals("title:QUERY1~ OR content:QUERY1~", queryHelper + .buildQuery("\"QUERY1~a\"").getQuery()); + } } public void test_proximitySearches() { - // ~10 - assertEquals("title:\"QUERY\"~10 OR content:\"QUERY\"~10", queryHelper - .buildQuery("QUERY~10").getQuery()); - assertEquals("title:\"QUERY\"~1 OR content:\"QUERY\"~1", queryHelper - .buildQuery("QUERY~1").getQuery()); - assertEquals("title:\"QUERY\"~5 OR content:\"QUERY\"~5", queryHelper - .buildQuery("QUERY~5.5").getQuery()); - assertEquals( - "(title:\"QUERY1\"~10 OR content:\"QUERY1\"~10) (title:QUERY2 OR content:QUERY2)", - queryHelper.buildQuery("QUERY1~10 QUERY2").getQuery()); - assertEquals( - "(title:\"QUERY1\"~5 OR content:\"QUERY1\"~5) (title:\"QUERY2\"~10 OR content:\"QUERY2\"~10)", - queryHelper.buildQuery("QUERY1~5 QUERY2~10").getQuery()); + for (String op : new String[] { "AND", "OR" }) { + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); + // ~10 + assertEquals("title:\"QUERY\"~10 OR content:\"QUERY\"~10", + queryHelper.buildQuery("QUERY~10").getQuery()); + assertEquals("title:\"QUERY\"~1 OR content:\"QUERY\"~1", + queryHelper.buildQuery("QUERY~1").getQuery()); + assertEquals("title:\"QUERY\"~5 OR content:\"QUERY\"~5", + queryHelper.buildQuery("QUERY~5.5").getQuery()); + assertEquals("(title:\"QUERY1\"~10 OR content:\"QUERY1\"~10) " + op + + " (title:QUERY2 OR content:QUERY2)", queryHelper + .buildQuery("QUERY1~10 QUERY2").getQuery()); + assertEquals("(title:\"QUERY1\"~5 OR content:\"QUERY1\"~5) " + op + + " (title:\"QUERY2\"~10 OR content:\"QUERY2\"~10)", + queryHelper.buildQuery("QUERY1~5 QUERY2~10").getQuery()); - assertEquals("mimetype:\"QUERY1\"~10", - queryHelper.buildQuery("mimetype:QUERY1~10").getQuery()); - assertEquals("mimetype:\"QUERY1\"~10 (title:QUERY2 OR content:QUERY2)", - queryHelper.buildQuery("mimetype:QUERY1~10 QUERY2").getQuery()); + assertEquals("mimetype:\"QUERY1\"~10", + queryHelper.buildQuery("mimetype:QUERY1~10").getQuery()); + assertEquals("mimetype:\"QUERY1\"~10 " + op + + " (title:QUERY2 OR content:QUERY2)", queryHelper + .buildQuery("mimetype:QUERY1~10 QUERY2").getQuery()); - assertEquals( - "title:\"QUERY1\\ QUERY2\"~10 OR content:\"QUERY1\\ QUERY2\"~10", - queryHelper.buildQuery("\"QUERY1 QUERY2\"~10").getQuery()); - assertEquals("title:\"QUERY1\"~10 OR content:\"QUERY1\"~10", - queryHelper.buildQuery("\"QUERY1~10\"").getQuery()); - - assertEquals("title:\"QUERY1\"~10 OR content:\"QUERY1\"~10", - queryHelper.buildQuery("\"QUERY1~10a\"").getQuery()); + assertEquals( + "title:\"QUERY1\\ QUERY2\"~10 OR content:\"QUERY1\\ QUERY2\"~10", + queryHelper.buildQuery("\"QUERY1 QUERY2\"~10").getQuery()); + assertEquals("title:\"QUERY1\"~10 OR content:\"QUERY1\"~10", + queryHelper.buildQuery("\"QUERY1~10\"").getQuery()); + assertEquals("title:\"QUERY1\"~10 OR content:\"QUERY1\"~10", + queryHelper.buildQuery("\"QUERY1~10a\"").getQuery()); + } } public void test_rangeSearches() { String rangeQuery; - // mod_date:[20020101 TO 20030101] - assertEquals( - "title:[20020101 TO 20030101] OR content:[20020101 TO 20030101]", - queryHelper.buildQuery("[20020101 TO 20030101]").getQuery()); - assertEquals("lastModified:[20020101 TO 20030101]", queryHelper - .buildQuery("lastModified:[20020101 TO 20030101]").getQuery()); - assertEquals( - "(title:QUERY OR content:QUERY) lastModified:[20020101 TO 20030101]", - queryHelper.buildQuery( - "QUERY lastModified:[20020101 TO 20030101]").getQuery()); - assertEquals("title:{Aida TO Carmen} OR content:{Aida TO Carmen}", - queryHelper.buildQuery("{Aida TO Carmen}").getQuery()); - assertEquals("lastModified:{Aida TO Carmen}", - queryHelper.buildQuery("lastModified:{Aida TO Carmen}") - .getQuery()); - assertEquals("(title:QUERY OR content:QUERY) title:{Aida TO Carmen}", - queryHelper.buildQuery("QUERY title:{Aida TO Carmen}") - .getQuery()); - assertEquals("lastModified:[20020101 TO abc]", - queryHelper.buildQuery("lastModified:[20020101 TO abc]") - .getQuery()); - assertEquals("lastModified:[abc TO 20020101]", - queryHelper.buildQuery("lastModified:[abc TO 20020101]") - .getQuery()); - assertEquals("lastModified:[20020101 TO *]", - queryHelper.buildQuery("lastModified:[20020101 TO *]") - .getQuery()); - assertEquals("lastModified:[* TO 20020101]", - queryHelper.buildQuery("lastModified:[* TO 20020101]") - .getQuery()); + for (String op : new String[] { "AND", "OR" }) { + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); + // mod_date:[20020101 TO 20030101] + assertEquals( + "title:[20020101 TO 20030101] OR content:[20020101 TO 20030101]", + queryHelper.buildQuery("[20020101 TO 20030101]").getQuery()); + assertEquals("lastModified:[20020101 TO 20030101]", queryHelper + .buildQuery("lastModified:[20020101 TO 20030101]") + .getQuery()); + assertEquals("(title:QUERY OR content:QUERY) " + op + + " lastModified:[20020101 TO 20030101]", queryHelper + .buildQuery("QUERY lastModified:[20020101 TO 20030101]") + .getQuery()); + assertEquals("title:{Aida TO Carmen} OR content:{Aida TO Carmen}", + queryHelper.buildQuery("{Aida TO Carmen}").getQuery()); + assertEquals("lastModified:{Aida TO Carmen}", queryHelper + .buildQuery("lastModified:{Aida TO Carmen}").getQuery()); + assertEquals("(title:QUERY OR content:QUERY) " + op + + " title:{Aida TO Carmen}", + queryHelper.buildQuery("QUERY title:{Aida TO Carmen}") + .getQuery()); + assertEquals("lastModified:[20020101 TO abc]", queryHelper + .buildQuery("lastModified:[20020101 TO abc]").getQuery()); + assertEquals("lastModified:[abc TO 20020101]", queryHelper + .buildQuery("lastModified:[abc TO 20020101]").getQuery()); + assertEquals("lastModified:[20020101 TO *]", queryHelper + .buildQuery("lastModified:[20020101 TO *]").getQuery()); + assertEquals("lastModified:[* TO 20020101]", queryHelper + .buildQuery("lastModified:[* TO 20020101]").getQuery()); - rangeQuery = "(content:[1 TO 2] OR content:[3 TO 4]) (content:[5 TO 6] OR content:[7 TO 8])"; - assertEquals(rangeQuery, queryHelper.buildQuery(rangeQuery).getQuery()); + rangeQuery = "(content:[1 TO 2] OR content:[3 TO 4]) " + op + + " (content:[5 TO 6] OR content:[7 TO 8])"; + assertEquals(rangeQuery, queryHelper.buildQuery(rangeQuery) + .getQuery()); - try { - queryHelper.buildQuery("lastModified:[20020101 TO]").getQuery(); - fail(); - } catch (final InvalidQueryException e) { - } - try { - queryHelper.buildQuery("lastModified:[TO 20030101]").getQuery(); - fail(); - } catch (final InvalidQueryException e) { - } - try { - queryHelper.buildQuery("lastModified:[20020101]").getQuery(); - fail(); - } catch (final InvalidQueryException e) { - } - try { - queryHelper.buildQuery("lastModified:[20030101]").getQuery(); - fail(); - } catch (final InvalidQueryException e) { - } + try { + queryHelper.buildQuery("lastModified:[20020101 TO]").getQuery(); + fail(); + } catch (final InvalidQueryException e) { + } + try { + queryHelper.buildQuery("lastModified:[TO 20030101]").getQuery(); + fail(); + } catch (final InvalidQueryException e) { + } + try { + queryHelper.buildQuery("lastModified:[20020101]").getQuery(); + fail(); + } catch (final InvalidQueryException e) { + } + try { + queryHelper.buildQuery("lastModified:[20030101]").getQuery(); + fail(); + } catch (final InvalidQueryException e) { + } - // mod_date:{20020101 TO 20030101} - assertEquals( - "title:{20020101 TO 20030101} OR content:{20020101 TO 20030101}", - queryHelper.buildQuery("{20020101 TO 20030101}").getQuery()); - assertEquals("lastModified:{20020101 TO 20030101}", queryHelper - .buildQuery("lastModified:{20020101 TO 20030101}").getQuery()); - assertEquals( - "(title:QUERY OR content:QUERY) lastModified:{20020101 TO 20030101}", - queryHelper.buildQuery( - "QUERY lastModified:{20020101 TO 20030101}").getQuery()); - assertEquals("title:{Aida TO Carmen} OR content:{Aida TO Carmen}", - queryHelper.buildQuery("{Aida TO Carmen}").getQuery()); - assertEquals("lastModified:{Aida TO Carmen}", - queryHelper.buildQuery("lastModified:{Aida TO Carmen}") - .getQuery()); - assertEquals("(title:QUERY OR content:QUERY) title:{Aida TO Carmen}", - queryHelper.buildQuery("QUERY title:{Aida TO Carmen}") - .getQuery()); - assertEquals("lastModified:{20020101 TO abc}", - queryHelper.buildQuery("lastModified:{20020101 TO abc}") - .getQuery()); - assertEquals("lastModified:{abc TO 20020101}", - queryHelper.buildQuery("lastModified:{abc TO 20020101}") - .getQuery()); - assertEquals("lastModified:{20020101 TO *}", - queryHelper.buildQuery("lastModified:{20020101 TO *}") - .getQuery()); - assertEquals("lastModified:{* TO 20020101}", - queryHelper.buildQuery("lastModified:{* TO 20020101}") - .getQuery()); + // mod_date:{20020101 TO 20030101} + assertEquals( + "title:{20020101 TO 20030101} OR content:{20020101 TO 20030101}", + queryHelper.buildQuery("{20020101 TO 20030101}").getQuery()); + assertEquals("lastModified:{20020101 TO 20030101}", queryHelper + .buildQuery("lastModified:{20020101 TO 20030101}") + .getQuery()); + assertEquals("(title:QUERY OR content:QUERY) " + op + + " lastModified:{20020101 TO 20030101}", queryHelper + .buildQuery("QUERY lastModified:{20020101 TO 20030101}") + .getQuery()); + assertEquals("title:{Aida TO Carmen} OR content:{Aida TO Carmen}", + queryHelper.buildQuery("{Aida TO Carmen}").getQuery()); + assertEquals("lastModified:{Aida TO Carmen}", queryHelper + .buildQuery("lastModified:{Aida TO Carmen}").getQuery()); + assertEquals("(title:QUERY OR content:QUERY) " + op + + " title:{Aida TO Carmen}", + queryHelper.buildQuery("QUERY title:{Aida TO Carmen}") + .getQuery()); + assertEquals("lastModified:{20020101 TO abc}", queryHelper + .buildQuery("lastModified:{20020101 TO abc}").getQuery()); + assertEquals("lastModified:{abc TO 20020101}", queryHelper + .buildQuery("lastModified:{abc TO 20020101}").getQuery()); + assertEquals("lastModified:{20020101 TO *}", queryHelper + .buildQuery("lastModified:{20020101 TO *}").getQuery()); + assertEquals("lastModified:{* TO 20020101}", queryHelper + .buildQuery("lastModified:{* TO 20020101}").getQuery()); - rangeQuery = "(content:{1 TO 2} OR content:{3 TO 4}) (content:{5 TO 6} OR content:{7 TO 8})"; - assertEquals(rangeQuery, queryHelper.buildQuery(rangeQuery).getQuery()); + rangeQuery = "(content:{1 TO 2} OR content:{3 TO 4}) " + op + + " (content:{5 TO 6} OR content:{7 TO 8})"; + assertEquals(rangeQuery, queryHelper.buildQuery(rangeQuery) + .getQuery()); - try { - queryHelper.buildQuery("lastModified:{20020101 TO}").getQuery(); - fail(); - } catch (final InvalidQueryException e) { - } - try { - queryHelper.buildQuery("lastModified:{TO 20030101}").getQuery(); - fail(); - } catch (final InvalidQueryException e) { - } - try { - queryHelper.buildQuery("lastModified:{20020101}").getQuery(); - fail(); - } catch (final InvalidQueryException e) { - } - try { - queryHelper.buildQuery("lastModified:{20030101}").getQuery(); - fail(); - } catch (final InvalidQueryException e) { - } + try { + queryHelper.buildQuery("lastModified:{20020101 TO}").getQuery(); + fail(); + } catch (final InvalidQueryException e) { + } + try { + queryHelper.buildQuery("lastModified:{TO 20030101}").getQuery(); + fail(); + } catch (final InvalidQueryException e) { + } + try { + queryHelper.buildQuery("lastModified:{20020101}").getQuery(); + fail(); + } catch (final InvalidQueryException e) { + } + try { + queryHelper.buildQuery("lastModified:{20030101}").getQuery(); + fail(); + } catch (final InvalidQueryException e) { + } - rangeQuery = "(content:[1 TO 2] OR content:{3 TO 4}) (content:{5 TO 6} OR content:[7 TO 8])"; - assertEquals(rangeQuery, queryHelper.buildQuery(rangeQuery).getQuery()); + rangeQuery = "(content:[1 TO 2] OR content:{3 TO 4}) " + op + + " (content:{5 TO 6} OR content:[7 TO 8])"; + assertEquals(rangeQuery, queryHelper.buildQuery(rangeQuery) + .getQuery()); + } } public void test_boosting() { - // ^1000 ""^1000 - assertEquals("title:QUERY^1000 OR content:QUERY^1000", queryHelper - .buildQuery("QUERY^1000").getQuery()); - assertEquals( - "(title:QUERY1^1000 OR content:QUERY1^1000) (title:QUERY2 OR content:QUERY2)", - queryHelper.buildQuery("QUERY1^1000 QUERY2").getQuery()); - assertEquals( - "(title:QUERY1^500 OR content:QUERY1^500) (title:QUERY2^1000 OR content:QUERY2^1000)", - queryHelper.buildQuery("QUERY1^500 QUERY2^1000").getQuery()); + for (String op : new String[] { "AND", "OR" }) { + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); + // ^1000 ""^1000 + assertEquals("title:QUERY^1000 OR content:QUERY^1000", queryHelper + .buildQuery("QUERY^1000").getQuery()); + assertEquals("(title:QUERY1^1000 OR content:QUERY1^1000) " + op + + " (title:QUERY2 OR content:QUERY2)", queryHelper + .buildQuery("QUERY1^1000 QUERY2").getQuery()); + assertEquals("(title:QUERY1^500 OR content:QUERY1^500) " + op + + " (title:QUERY2^1000 OR content:QUERY2^1000)", + queryHelper.buildQuery("QUERY1^500 QUERY2^1000").getQuery()); - assertEquals("mimetype:QUERY1^1000", - queryHelper.buildQuery("mimetype:QUERY1^1000").getQuery()); - assertEquals("mimetype:QUERY1^1000 (title:QUERY2 OR content:QUERY2)", - queryHelper.buildQuery("mimetype:QUERY1^1000 QUERY2") - .getQuery()); + assertEquals("mimetype:QUERY1^1000", + queryHelper.buildQuery("mimetype:QUERY1^1000").getQuery()); + assertEquals("mimetype:QUERY1^1000 " + op + + " (title:QUERY2 OR content:QUERY2)", queryHelper + .buildQuery("mimetype:QUERY1^1000 QUERY2").getQuery()); - assertEquals( - "title:QUERY1\\ QUERY2^1000 OR content:QUERY1\\ QUERY2^1000", - queryHelper.buildQuery("\"QUERY1 QUERY2\"^1000").getQuery()); - assertEquals("title:QUERY1^1000 OR content:QUERY1^1000", queryHelper - .buildQuery("\"QUERY1^1000\"").getQuery()); + assertEquals( + "title:QUERY1\\ QUERY2^1000 OR content:QUERY1\\ QUERY2^1000", + queryHelper.buildQuery("\"QUERY1 QUERY2\"^1000").getQuery()); + assertEquals("title:QUERY1^1000 OR content:QUERY1^1000", + queryHelper.buildQuery("\"QUERY1^1000\"").getQuery()); + } } public void test_reserved() { @@ -574,8 +635,8 @@ public class QueryHelperTest extends S2TestCase { assertEquals("title:\\" + Constants.RESERVED[i] + " OR content:\\" + Constants.RESERVED[i], queryHelper - .buildQuery("\\" + Constants.RESERVED[i]) - .getQuery()); + .buildQuery("\\" + Constants.RESERVED[i]) + .getQuery()); continue; } else if (Constants.RESERVED[i].equals("{") && e.getMessageCode().equals( @@ -583,8 +644,8 @@ public class QueryHelperTest extends S2TestCase { assertEquals("title:\\" + Constants.RESERVED[i] + " OR content:\\" + Constants.RESERVED[i], queryHelper - .buildQuery("\\" + Constants.RESERVED[i]) - .getQuery()); + .buildQuery("\\" + Constants.RESERVED[i]) + .getQuery()); continue; } else if (Constants.RESERVED[i].equals("[") && e.getMessageCode().equals( @@ -592,8 +653,8 @@ public class QueryHelperTest extends S2TestCase { assertEquals("title:\\" + Constants.RESERVED[i] + " OR content:\\" + Constants.RESERVED[i], queryHelper - .buildQuery("\\" + Constants.RESERVED[i]) - .getQuery()); + .buildQuery("\\" + Constants.RESERVED[i]) + .getQuery()); continue; } else if (Constants.RESERVED[i].equals("(") && e.getMessageCode().equals( @@ -601,8 +662,8 @@ public class QueryHelperTest extends S2TestCase { assertEquals("title:\\" + Constants.RESERVED[i] + " OR content:\\" + Constants.RESERVED[i], queryHelper - .buildQuery("\\" + Constants.RESERVED[i]) - .getQuery()); + .buildQuery("\\" + Constants.RESERVED[i]) + .getQuery()); continue; } } @@ -612,92 +673,111 @@ public class QueryHelperTest extends S2TestCase { } public void test_or() { - assertEquals("title:QUERY OR content:QUERY", - queryHelper.buildQuery("OR QUERY").getQuery()); - assertEquals( - "(title:QUERY1 OR content:QUERY1) OR (title:QUERY2 OR content:QUERY2)", - queryHelper.buildQuery("QUERY1 OR QUERY2").getQuery()); - assertEquals("title:QUERY", queryHelper.buildQuery("OR title:QUERY") - .getQuery()); - assertEquals("title:QUERY1 OR title:QUERY2", - queryHelper.buildQuery("title:QUERY1 OR title:QUERY2") - .getQuery()); - assertEquals("(title:QUERY1 OR content:QUERY1) OR title:QUERY2", - queryHelper.buildQuery("QUERY1 OR title:QUERY2").getQuery()); - assertEquals("mimetype:QUERY1 OR title:QUERY2", - queryHelper.buildQuery("mimetype:QUERY1 OR title:QUERY2") - .getQuery()); - assertEquals( - "(title:QUERY1 OR content:QUERY1) OR (title:QUERY2 OR content:QUERY2) (title:QUERY3 OR content:QUERY3)", - queryHelper.buildQuery("QUERY1 OR QUERY2 QUERY3").getQuery()); - assertEquals( - "(title:QUERY1 OR content:QUERY1) OR (title:QUERY2 OR content:QUERY2) OR (title:QUERY3 OR content:QUERY3)", - queryHelper.buildQuery("QUERY1 OR QUERY2 OR QUERY3").getQuery()); + for (String op : new String[] { "AND", "OR" }) { + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); + assertEquals("title:QUERY OR content:QUERY", queryHelper + .buildQuery("OR QUERY").getQuery()); + assertEquals( + "(title:QUERY1 OR content:QUERY1) OR (title:QUERY2 OR content:QUERY2)", + queryHelper.buildQuery("QUERY1 OR QUERY2").getQuery()); + assertEquals("title:QUERY", queryHelper + .buildQuery("OR title:QUERY").getQuery()); + assertEquals("title:QUERY1 OR title:QUERY2", queryHelper + .buildQuery("title:QUERY1 OR title:QUERY2").getQuery()); + assertEquals("(title:QUERY1 OR content:QUERY1) OR title:QUERY2", + queryHelper.buildQuery("QUERY1 OR title:QUERY2").getQuery()); + assertEquals("mimetype:QUERY1 OR title:QUERY2", queryHelper + .buildQuery("mimetype:QUERY1 OR title:QUERY2").getQuery()); + assertEquals( + "(title:QUERY1 OR content:QUERY1) OR (title:QUERY2 OR content:QUERY2) " + + op + " (title:QUERY3 OR content:QUERY3)", + queryHelper.buildQuery("QUERY1 OR QUERY2 QUERY3") + .getQuery()); + assertEquals( + "(title:QUERY1 OR content:QUERY1) OR (title:QUERY2 OR content:QUERY2) OR (title:QUERY3 OR content:QUERY3)", + queryHelper.buildQuery("QUERY1 OR QUERY2 OR QUERY3") + .getQuery()); + } } public void test_and() { - assertEquals("title:QUERY OR content:QUERY", - queryHelper.buildQuery("AND QUERY").getQuery()); - assertEquals( - "(title:QUERY1 OR content:QUERY1) AND (title:QUERY2 OR content:QUERY2)", - queryHelper.buildQuery("QUERY1 AND QUERY2").getQuery()); - assertEquals("title:QUERY", queryHelper.buildQuery("AND title:QUERY") - .getQuery()); - assertEquals("title:QUERY1 AND title:QUERY2", - queryHelper.buildQuery("title:QUERY1 AND title:QUERY2") - .getQuery()); - assertEquals("(title:QUERY1 OR content:QUERY1) AND title:QUERY2", - queryHelper.buildQuery("QUERY1 AND title:QUERY2").getQuery()); - assertEquals("mimetype:QUERY1 AND title:QUERY2", queryHelper - .buildQuery("mimetype:QUERY1 AND title:QUERY2").getQuery()); - assertEquals( - "(title:QUERY1 OR content:QUERY1) AND (title:QUERY2 OR content:QUERY2) (title:QUERY3 OR content:QUERY3)", - queryHelper.buildQuery("QUERY1 AND QUERY2 QUERY3").getQuery()); - assertEquals( - "(title:QUERY1 OR content:QUERY1) (title:QUERY2 OR content:QUERY2) AND (title:QUERY3 OR content:QUERY3)", - queryHelper.buildQuery("QUERY1 QUERY2 AND QUERY3").getQuery()); - assertEquals( - "(title:QUERY1 OR content:QUERY1) AND (title:QUERY2 OR content:QUERY2) AND (title:QUERY3 OR content:QUERY3)", - queryHelper.buildQuery("QUERY1 AND QUERY2 AND QUERY3") - .getQuery()); + for (String op : new String[] { "AND", "OR" }) { + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); + assertEquals("title:QUERY OR content:QUERY", queryHelper + .buildQuery("AND QUERY").getQuery()); + assertEquals( + "(title:QUERY1 OR content:QUERY1) AND (title:QUERY2 OR content:QUERY2)", + queryHelper.buildQuery("QUERY1 AND QUERY2").getQuery()); + assertEquals("title:QUERY", + queryHelper.buildQuery("AND title:QUERY").getQuery()); + assertEquals("title:QUERY1 AND title:QUERY2", queryHelper + .buildQuery("title:QUERY1 AND title:QUERY2").getQuery()); + assertEquals("(title:QUERY1 OR content:QUERY1) AND title:QUERY2", + queryHelper.buildQuery("QUERY1 AND title:QUERY2") + .getQuery()); + assertEquals("mimetype:QUERY1 AND title:QUERY2", queryHelper + .buildQuery("mimetype:QUERY1 AND title:QUERY2").getQuery()); + assertEquals( + "(title:QUERY1 OR content:QUERY1) AND (title:QUERY2 OR content:QUERY2) " + + op + " (title:QUERY3 OR content:QUERY3)", + queryHelper.buildQuery("QUERY1 AND QUERY2 QUERY3") + .getQuery()); + assertEquals( + "(title:QUERY1 OR content:QUERY1) " + + op + + " (title:QUERY2 OR content:QUERY2) AND (title:QUERY3 OR content:QUERY3)", + queryHelper.buildQuery("QUERY1 QUERY2 AND QUERY3") + .getQuery()); + assertEquals( + "(title:QUERY1 OR content:QUERY1) AND (title:QUERY2 OR content:QUERY2) AND (title:QUERY3 OR content:QUERY3)", + queryHelper.buildQuery("QUERY1 AND QUERY2 AND QUERY3") + .getQuery()); + } } public void test_not() { - assertEquals("NOT (title:QUERY OR content:QUERY)", queryHelper - .buildQuery("NOT QUERY").getQuery()); - assertEquals("NOT title:QUERY", - queryHelper.buildQuery("NOT title:QUERY").getQuery()); - assertEquals( - "(title:QUERY2 OR content:QUERY2) NOT (title:QUERY1 OR content:QUERY1)", - queryHelper.buildQuery("NOT QUERY1 QUERY2").getQuery()); - assertEquals( - "(title:QUERY2 OR content:QUERY2) NOT (title:QUERY1 OR content:QUERY1)", - queryHelper.buildQuery("NOT QUERY1 OR QUERY2").getQuery()); - assertEquals( - "NOT (title:QUERY1 OR content:QUERY1) NOT (title:QUERY2 OR content:QUERY2)", - queryHelper.buildQuery("NOT QUERY1 NOT QUERY2").getQuery()); - assertEquals( - "NOT (title:QUERY1 OR content:QUERY1) NOT (title:QUERY2 OR content:QUERY2)", - queryHelper.buildQuery("NOT QUERY1 OR NOT QUERY2").getQuery()); - assertEquals( - "(title:QUERY2 OR content:QUERY2) NOT (title:QUERY1 OR content:QUERY1) NOT (title:QUERY3 OR content:QUERY3)", - queryHelper.buildQuery("NOT QUERY1 QUERY2 NOT QUERY3") - .getQuery()); - assertEquals("NOT mimetype:QUERY", - queryHelper.buildQuery("NOT mimetype:QUERY").getQuery()); - assertEquals("NOT mimetype:QUERY1 NOT title:QUERY2", queryHelper - .buildQuery("NOT mimetype:QUERY1 NOT title:QUERY2").getQuery()); - assertEquals("(title:QUERY2 OR content:QUERY2) NOT mimetype:QUERY1", - queryHelper.buildQuery("NOT mimetype:QUERY1 QUERY2").getQuery()); - assertEquals("mimetype:QUERY2 NOT (title:QUERY1 OR content:QUERY1)", - queryHelper.buildQuery("NOT QUERY1 mimetype:QUERY2").getQuery()); - + for (String op : new String[] { "AND", "OR" }) { + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); + assertEquals("NOT (title:QUERY OR content:QUERY)", queryHelper + .buildQuery("NOT QUERY").getQuery()); + assertEquals("NOT title:QUERY", + queryHelper.buildQuery("NOT title:QUERY").getQuery()); + assertEquals("(title:QUERY2 OR content:QUERY2) " + op + + " NOT (title:QUERY1 OR content:QUERY1)", queryHelper + .buildQuery("NOT QUERY1 QUERY2").getQuery()); + assertEquals("(title:QUERY2 OR content:QUERY2) " + op + + " NOT (title:QUERY1 OR content:QUERY1)", queryHelper + .buildQuery("NOT QUERY1 OR QUERY2").getQuery()); + assertEquals("NOT (title:QUERY1 OR content:QUERY1) " + op + + " NOT (title:QUERY2 OR content:QUERY2)", queryHelper + .buildQuery("NOT QUERY1 NOT QUERY2").getQuery()); + assertEquals("NOT (title:QUERY1 OR content:QUERY1) " + op + + " NOT (title:QUERY2 OR content:QUERY2)", queryHelper + .buildQuery("NOT QUERY1 OR NOT QUERY2").getQuery()); + assertEquals("(title:QUERY2 OR content:QUERY2) " + op + + " NOT (title:QUERY1 OR content:QUERY1) " + op + + " NOT (title:QUERY3 OR content:QUERY3)", queryHelper + .buildQuery("NOT QUERY1 QUERY2 NOT QUERY3").getQuery()); + assertEquals("NOT mimetype:QUERY", + queryHelper.buildQuery("NOT mimetype:QUERY").getQuery()); + assertEquals( + "NOT mimetype:QUERY1 " + op + " NOT title:QUERY2", + queryHelper.buildQuery( + "NOT mimetype:QUERY1 NOT title:QUERY2").getQuery()); + assertEquals("(title:QUERY2 OR content:QUERY2) " + op + + " NOT mimetype:QUERY1", + queryHelper.buildQuery("NOT mimetype:QUERY1 QUERY2") + .getQuery()); + assertEquals("mimetype:QUERY2 " + op + + " NOT (title:QUERY1 OR content:QUERY1)", queryHelper + .buildQuery("NOT QUERY1 mimetype:QUERY2").getQuery()); + } } public void test_escapeValue() { final String[] targets = new String[] { "+", "-", "&&", "||", "!", "(", ")", "{", "}", "[", "]", "^", "\"", "~", ":", "\\", " ", - "\u3000" }; + "\u3000" }; for (final String target : targets) { assertEquals("abc\\" + target + "123", QueryUtil.escapeValue("abc" + target + "123")); @@ -742,145 +822,168 @@ public class QueryHelperTest extends S2TestCase { } public void test_buildFacet() { - assertEquals("", queryHelper.buildFacetQuery("")); + for (String op : new String[] { "AND", "OR" }) { + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); + assertEquals("", queryHelper.buildFacetQuery("")); - assertEquals("title:QUERY OR content:QUERY", - queryHelper.buildFacetQuery("QUERY")); - assertEquals("title:QUERY OR content:QUERY", - queryHelper.buildFacetQuery("QUERY ")); - assertEquals("title:QUERY OR content:QUERY", - queryHelper.buildFacetQuery(" QUERY")); + assertEquals("title:QUERY OR content:QUERY", + queryHelper.buildFacetQuery("QUERY")); + assertEquals("title:QUERY OR content:QUERY", + queryHelper.buildFacetQuery("QUERY ")); + assertEquals("title:QUERY OR content:QUERY", + queryHelper.buildFacetQuery(" QUERY")); - assertEquals( - "(title:QUERY1 OR content:QUERY1) (title:QUERY2 OR content:QUERY2)", - queryHelper.buildFacetQuery("QUERY1 QUERY2")); - assertEquals( - "(title:QUERY1 OR content:QUERY1) (title:QUERY2 OR content:QUERY2)", - queryHelper.buildFacetQuery("QUERY1 QUERY2 ")); - assertEquals( - "(title:QUERY1 OR content:QUERY1) (title:QUERY2 OR content:QUERY2)", - queryHelper.buildFacetQuery(" QUERY1 QUERY2")); + assertEquals("(title:QUERY1 OR content:QUERY1) " + op + + " (title:QUERY2 OR content:QUERY2)", + queryHelper.buildFacetQuery("QUERY1 QUERY2")); + assertEquals("(title:QUERY1 OR content:QUERY1) " + op + + " (title:QUERY2 OR content:QUERY2)", + queryHelper.buildFacetQuery("QUERY1 QUERY2 ")); + assertEquals("(title:QUERY1 OR content:QUERY1) " + op + + " (title:QUERY2 OR content:QUERY2)", + queryHelper.buildFacetQuery(" QUERY1 QUERY2")); - assertEquals("title:QUERY1\\ QUERY2 OR content:QUERY1\\ QUERY2", - queryHelper.buildFacetQuery("\"QUERY1 QUERY2\"")); - assertEquals("title:QUERY1\\ QUERY2 OR content:QUERY1\\ QUERY2", - queryHelper.buildFacetQuery("\"QUERY1 QUERY2\" ")); - assertEquals("title:QUERY1\\ QUERY2 OR content:QUERY1\\ QUERY2", - queryHelper.buildFacetQuery(" \"QUERY1 QUERY2\"")); + assertEquals("title:QUERY1\\ QUERY2 OR content:QUERY1\\ QUERY2", + queryHelper.buildFacetQuery("\"QUERY1 QUERY2\"")); + assertEquals("title:QUERY1\\ QUERY2 OR content:QUERY1\\ QUERY2", + queryHelper.buildFacetQuery("\"QUERY1 QUERY2\" ")); + assertEquals("title:QUERY1\\ QUERY2 OR content:QUERY1\\ QUERY2", + queryHelper.buildFacetQuery(" \"QUERY1 QUERY2\"")); - assertEquals( - "(title:QUERY1\\ QUERY2 OR content:QUERY1\\ QUERY2) (title:QUERY3 OR content:QUERY3)", - queryHelper.buildFacetQuery("\"QUERY1 QUERY2\" QUERY3")); + assertEquals("(title:QUERY1\\ QUERY2 OR content:QUERY1\\ QUERY2) " + + op + " (title:QUERY3 OR content:QUERY3)", + queryHelper.buildFacetQuery("\"QUERY1 QUERY2\" QUERY3")); + } } public void test_buildFacet_fullwidthSpace() { + for (String op : new String[] { "AND", "OR" }) { + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); - assertEquals( - "(title:QUERY1 OR content:QUERY1) (title:QUERY2 OR content:QUERY2)", - queryHelper.buildFacetQuery("QUERY1\u3000QUERY2")); - assertEquals( - "(title:QUERY1 OR content:QUERY1) (title:QUERY2 OR content:QUERY2)", - queryHelper.buildFacetQuery("QUERY1\u3000QUERY2\u3000")); - assertEquals( - "(title:QUERY1 OR content:QUERY1) (title:QUERY2 OR content:QUERY2)", - queryHelper.buildFacetQuery("\u3000QUERY1\u3000QUERY2")); + assertEquals("(title:QUERY1 OR content:QUERY1) " + op + + " (title:QUERY2 OR content:QUERY2)", + queryHelper.buildFacetQuery("QUERY1\u3000QUERY2")); + assertEquals("(title:QUERY1 OR content:QUERY1) " + op + + " (title:QUERY2 OR content:QUERY2)", + queryHelper.buildFacetQuery("QUERY1\u3000QUERY2\u3000")); + assertEquals("(title:QUERY1 OR content:QUERY1) " + op + + " (title:QUERY2 OR content:QUERY2)", + queryHelper.buildFacetQuery("\u3000QUERY1\u3000QUERY2")); - assertEquals( - "title:QUERY1\\\u3000QUERY2 OR content:QUERY1\\\u3000QUERY2", - queryHelper.buildFacetQuery("\"QUERY1\u3000QUERY2\"")); - - assertEquals( - "(title:QUERY1\\\u3000QUERY2 OR content:QUERY1\\\u3000QUERY2) (title:QUERY3 OR content:QUERY3)", - queryHelper - .buildFacetQuery("\"QUERY1\u3000QUERY2\"\u3000QUERY3")); + assertEquals( + "title:QUERY1\\\u3000QUERY2 OR content:QUERY1\\\u3000QUERY2", + queryHelper.buildFacetQuery("\"QUERY1\u3000QUERY2\"")); + assertEquals( + "(title:QUERY1\\\u3000QUERY2 OR content:QUERY1\\\u3000QUERY2) " + + op + " (title:QUERY3 OR content:QUERY3)", + queryHelper + .buildFacetQuery("\"QUERY1\u3000QUERY2\"\u3000QUERY3")); + } } public void test_buildFacet_prefix() { - assertEquals("mimetype:QUERY1", - queryHelper.buildFacetQuery("mimetype:QUERY1")); - assertEquals("mimetype:QUERY1 (title:QUERY2 OR content:QUERY2)", - queryHelper.buildFacetQuery("mimetype:QUERY1 QUERY2")); - assertEquals( - "mimetype:QUERY1 (title:QUERY2 OR content:QUERY2) (title:QUERY3 OR content:QUERY3)", - queryHelper.buildFacetQuery("mimetype:QUERY1 QUERY2 QUERY3")); - assertEquals( - "mimetype:QUERY1 host:QUERY2 (title:QUERY3 OR content:QUERY3)", - queryHelper - .buildFacetQuery("mimetype:QUERY1 host:QUERY2 QUERY3")); - assertEquals( - "mimetype:QUERY1\\ QUERY2 (title:QUERY3 OR content:QUERY3)", - queryHelper - .buildFacetQuery("mimetype:\"QUERY1 QUERY2\" QUERY3")); - + for (String op : new String[] { "AND", "OR" }) { + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); + assertEquals("mimetype:QUERY1", + queryHelper.buildFacetQuery("mimetype:QUERY1")); + assertEquals("mimetype:QUERY1 " + op + + " (title:QUERY2 OR content:QUERY2)", + queryHelper.buildFacetQuery("mimetype:QUERY1 QUERY2")); + assertEquals("mimetype:QUERY1 " + op + + " (title:QUERY2 OR content:QUERY2) " + op + + " (title:QUERY3 OR content:QUERY3)", + queryHelper + .buildFacetQuery("mimetype:QUERY1 QUERY2 QUERY3")); + assertEquals( + "mimetype:QUERY1 " + op + " host:QUERY2 " + op + + " (title:QUERY3 OR content:QUERY3)", + queryHelper + .buildFacetQuery("mimetype:QUERY1 host:QUERY2 QUERY3")); + assertEquals( + "mimetype:QUERY1\\ QUERY2 " + op + + " (title:QUERY3 OR content:QUERY3)", + queryHelper + .buildFacetQuery("mimetype:\"QUERY1 QUERY2\" QUERY3")); + } } public void test_buildFacet_prefix_unknown() { - assertEquals("title:site\\: OR content:site\\:", - queryHelper.buildFacetQuery("site:")); - assertEquals("title:hoge\\:QUERY1 OR content:hoge\\:QUERY1", - queryHelper.buildFacetQuery("hoge:QUERY1")); - assertEquals( - "(title:hoge\\:QUERY1 OR content:hoge\\:QUERY1) (title:QUERY2 OR content:QUERY2)", - queryHelper.buildFacetQuery("hoge:QUERY1 QUERY2")); - assertEquals( - "(title:hoge\\:QUERY1 OR content:hoge\\:QUERY1) (title:QUERY2 OR content:QUERY2) (title:QUERY3 OR content:QUERY3)", - queryHelper.buildFacetQuery("hoge:QUERY1 QUERY2 QUERY3")); - assertEquals( - "(title:hoge\\:QUERY1 OR content:hoge\\:QUERY1) host:QUERY2 (title:QUERY3 OR content:QUERY3)", - queryHelper.buildFacetQuery("hoge:QUERY1 host:QUERY2 QUERY3")); - assertEquals( - "(title:hoge\\:QUERY1\\ QUERY2 OR content:hoge\\:QUERY1\\ QUERY2) (title:QUERY3 OR content:QUERY3)", - queryHelper.buildFacetQuery("hoge:\"QUERY1 QUERY2\" QUERY3")); - + for (String op : new String[] { "AND", "OR" }) { + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); + assertEquals("title:site\\: OR content:site\\:", + queryHelper.buildFacetQuery("site:")); + assertEquals("title:hoge\\:QUERY1 OR content:hoge\\:QUERY1", + queryHelper.buildFacetQuery("hoge:QUERY1")); + assertEquals("(title:hoge\\:QUERY1 OR content:hoge\\:QUERY1) " + op + + " (title:QUERY2 OR content:QUERY2)", + queryHelper.buildFacetQuery("hoge:QUERY1 QUERY2")); + assertEquals("(title:hoge\\:QUERY1 OR content:hoge\\:QUERY1) " + op + + " (title:QUERY2 OR content:QUERY2) " + op + + " (title:QUERY3 OR content:QUERY3)", + queryHelper.buildFacetQuery("hoge:QUERY1 QUERY2 QUERY3")); + assertEquals("(title:hoge\\:QUERY1 OR content:hoge\\:QUERY1) " + op + + " host:QUERY2 " + op + + " (title:QUERY3 OR content:QUERY3)", + queryHelper + .buildFacetQuery("hoge:QUERY1 host:QUERY2 QUERY3")); + assertEquals( + "(title:hoge\\:QUERY1\\ QUERY2 OR content:hoge\\:QUERY1\\ QUERY2) " + + op + " (title:QUERY3 OR content:QUERY3)", + queryHelper + .buildFacetQuery("hoge:\"QUERY1 QUERY2\" QUERY3")); + } } public void test_buildFacet_sortField() { - String query; - String searchQuery; + for (String op : new String[] { "AND", "OR" }) { + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); + String query; + String searchQuery; - query = ""; - searchQuery = queryHelper.buildFacetQuery(query); - assertEquals("", searchQuery); + query = ""; + searchQuery = queryHelper.buildFacetQuery(query); + assertEquals("", searchQuery); - query = "sort:contentLength"; - searchQuery = queryHelper.buildFacetQuery(query); - assertEquals("", searchQuery); + query = "sort:contentLength"; + searchQuery = queryHelper.buildFacetQuery(query); + assertEquals("", searchQuery); - query = "sort:contentLength.desc"; - searchQuery = queryHelper.buildFacetQuery(query); - assertEquals("", searchQuery); + query = "sort:contentLength.desc"; + searchQuery = queryHelper.buildFacetQuery(query); + assertEquals("", searchQuery); - query = "sort:contentLength.asc,lastModified"; - searchQuery = queryHelper.buildFacetQuery(query); - assertEquals("", searchQuery); + query = "sort:contentLength.asc,lastModified"; + searchQuery = queryHelper.buildFacetQuery(query); + assertEquals("", searchQuery); - query = "QUERY sort:contentLength"; - searchQuery = queryHelper.buildFacetQuery(query); - assertEquals("title:QUERY OR content:QUERY", searchQuery); + query = "QUERY sort:contentLength"; + searchQuery = queryHelper.buildFacetQuery(query); + assertEquals("title:QUERY OR content:QUERY", searchQuery); - query = "QUERY sort:contentLength.desc"; - searchQuery = queryHelper.buildFacetQuery(query); - assertEquals("title:QUERY OR content:QUERY", searchQuery); + query = "QUERY sort:contentLength.desc"; + searchQuery = queryHelper.buildFacetQuery(query); + assertEquals("title:QUERY OR content:QUERY", searchQuery); - query = "QUERY sort:contentLength.asc,lastModified"; - searchQuery = queryHelper.buildFacetQuery(query); - assertEquals("title:QUERY OR content:QUERY", searchQuery); + query = "QUERY sort:contentLength.asc,lastModified"; + searchQuery = queryHelper.buildFacetQuery(query); + assertEquals("title:QUERY OR content:QUERY", searchQuery); - query = "QUERY mimetype:QUERY1 sort:contentLength"; - searchQuery = queryHelper.buildFacetQuery(query); - assertEquals("(title:QUERY OR content:QUERY) mimetype:QUERY1", - searchQuery); + query = "QUERY mimetype:QUERY1 sort:contentLength"; + searchQuery = queryHelper.buildFacetQuery(query); + assertEquals("(title:QUERY OR content:QUERY) " + op + + " mimetype:QUERY1", searchQuery); - query = "QUERY sort:contentLength.desc mimetype:QUERY1"; - searchQuery = queryHelper.buildFacetQuery(query); - assertEquals("(title:QUERY OR content:QUERY) mimetype:QUERY1", - searchQuery); + query = "QUERY sort:contentLength.desc mimetype:QUERY1"; + searchQuery = queryHelper.buildFacetQuery(query); + assertEquals("(title:QUERY OR content:QUERY) " + op + + " mimetype:QUERY1", searchQuery); - query = "QUERY sort:contentLength.asc,lastModified mimetype:QUERY1"; - searchQuery = queryHelper.buildFacetQuery(query); - assertEquals("(title:QUERY OR content:QUERY) mimetype:QUERY1", - searchQuery); + query = "QUERY sort:contentLength.asc,lastModified mimetype:QUERY1"; + searchQuery = queryHelper.buildFacetQuery(query); + assertEquals("(title:QUERY OR content:QUERY) " + op + + " mimetype:QUERY1", searchQuery); + } } public void test_buildFacet_sortField_invalid() { @@ -901,196 +1004,219 @@ public class QueryHelperTest extends S2TestCase { } public void test_buildFacet_wildcardSearches() { - // * + for (String op : new String[] { "AND", "OR" }) { + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); + // * - assertEquals("title:\\* OR content:\\*", - queryHelper.buildFacetQuery("*")); - assertEquals("title:QUERY* OR content:QUERY*", - queryHelper.buildFacetQuery("QUERY* ")); - assertEquals("title:Q*ERY OR content:Q*ERY", - queryHelper.buildFacetQuery(" Q*ERY")); + assertEquals("title:\\* OR content:\\*", + queryHelper.buildFacetQuery("*")); + assertEquals("title:QUERY* OR content:QUERY*", + queryHelper.buildFacetQuery("QUERY* ")); + assertEquals("title:Q*ERY OR content:Q*ERY", + queryHelper.buildFacetQuery(" Q*ERY")); - assertEquals( - "(title:Q*ERY1 OR content:Q*ERY1) (title:Q*ERY2 OR content:Q*ERY2)", - queryHelper.buildFacetQuery("Q*ERY1 Q*ERY2")); + assertEquals("(title:Q*ERY1 OR content:Q*ERY1) " + op + + " (title:Q*ERY2 OR content:Q*ERY2)", + queryHelper.buildFacetQuery("Q*ERY1 Q*ERY2")); - assertEquals("title:Q*ERY1\\ Q*ERY2 OR content:Q*ERY1\\ Q*ERY2", - queryHelper.buildFacetQuery("\"Q*ERY1 Q*ERY2\"")); + assertEquals("title:Q*ERY1\\ Q*ERY2 OR content:Q*ERY1\\ Q*ERY2", + queryHelper.buildFacetQuery("\"Q*ERY1 Q*ERY2\"")); - assertEquals( - "(title:Q*ERY1\\ Q*ERY2 OR content:Q*ERY1\\ Q*ERY2) (title:Q*ERY3 OR content:Q*ERY3)", - queryHelper.buildFacetQuery("\"Q*ERY1 Q*ERY2\" Q*ERY3")); + assertEquals("(title:Q*ERY1\\ Q*ERY2 OR content:Q*ERY1\\ Q*ERY2) " + + op + " (title:Q*ERY3 OR content:Q*ERY3)", + queryHelper.buildFacetQuery("\"Q*ERY1 Q*ERY2\" Q*ERY3")); - assertEquals("mimetype:QUERY1*", - queryHelper.buildFacetQuery("mimetype:QUERY1*")); - assertEquals("mimetype:QUERY1* (title:QUERY2 OR content:QUERY2)", - queryHelper.buildFacetQuery("mimetype:QUERY1* QUERY2")); + assertEquals("mimetype:QUERY1*", + queryHelper.buildFacetQuery("mimetype:QUERY1*")); + assertEquals("mimetype:QUERY1* " + op + + " (title:QUERY2 OR content:QUERY2)", + queryHelper.buildFacetQuery("mimetype:QUERY1* QUERY2")); - assertEquals("title:\\*QUERY1 OR content:\\*QUERY1", - queryHelper.buildFacetQuery("*QUERY1")); - assertEquals("title:\\*QUERY1* OR content:\\*QUERY1*", - queryHelper.buildFacetQuery("*QUERY1*")); + assertEquals("title:\\*QUERY1 OR content:\\*QUERY1", + queryHelper.buildFacetQuery("*QUERY1")); + assertEquals("title:\\*QUERY1* OR content:\\*QUERY1*", + queryHelper.buildFacetQuery("*QUERY1*")); - // ? + // ? - assertEquals("title:\\? OR content:\\?", - queryHelper.buildFacetQuery("?")); - assertEquals("title:QUERY? OR content:QUERY?", - queryHelper.buildFacetQuery("QUERY? ")); - assertEquals("title:Q?ERY OR content:Q?ERY", - queryHelper.buildFacetQuery(" Q?ERY")); + assertEquals("title:\\? OR content:\\?", + queryHelper.buildFacetQuery("?")); + assertEquals("title:QUERY? OR content:QUERY?", + queryHelper.buildFacetQuery("QUERY? ")); + assertEquals("title:Q?ERY OR content:Q?ERY", + queryHelper.buildFacetQuery(" Q?ERY")); - assertEquals( - "(title:Q?ERY1 OR content:Q?ERY1) (title:Q?ERY2 OR content:Q?ERY2)", - queryHelper.buildFacetQuery("Q?ERY1 Q?ERY2")); + assertEquals("(title:Q?ERY1 OR content:Q?ERY1) " + op + + " (title:Q?ERY2 OR content:Q?ERY2)", + queryHelper.buildFacetQuery("Q?ERY1 Q?ERY2")); - assertEquals("title:Q?ERY1\\ Q?ERY2 OR content:Q?ERY1\\ Q?ERY2", - queryHelper.buildFacetQuery("\"Q?ERY1 Q?ERY2\"")); + assertEquals("title:Q?ERY1\\ Q?ERY2 OR content:Q?ERY1\\ Q?ERY2", + queryHelper.buildFacetQuery("\"Q?ERY1 Q?ERY2\"")); - assertEquals( - "(title:Q?ERY1\\ Q?ERY2 OR content:Q?ERY1\\ Q?ERY2) (title:Q?ERY3 OR content:Q?ERY3)", - queryHelper.buildFacetQuery("\"Q?ERY1 Q?ERY2\" Q?ERY3")); + assertEquals("(title:Q?ERY1\\ Q?ERY2 OR content:Q?ERY1\\ Q?ERY2) " + + op + " (title:Q?ERY3 OR content:Q?ERY3)", + queryHelper.buildFacetQuery("\"Q?ERY1 Q?ERY2\" Q?ERY3")); - assertEquals("mimetype:QUERY1?", - queryHelper.buildFacetQuery("mimetype:QUERY1?")); - assertEquals("mimetype:QUERY1? (title:QUERY2 OR content:QUERY2)", - queryHelper.buildFacetQuery("mimetype:QUERY1? QUERY2")); + assertEquals("mimetype:QUERY1?", + queryHelper.buildFacetQuery("mimetype:QUERY1?")); + assertEquals("mimetype:QUERY1? " + op + + " (title:QUERY2 OR content:QUERY2)", + queryHelper.buildFacetQuery("mimetype:QUERY1? QUERY2")); - assertEquals("title:\\?QUERY1 OR content:\\?QUERY1", - queryHelper.buildFacetQuery("?QUERY1")); - assertEquals("title:\\?QUERY1? OR content:\\?QUERY1?", - queryHelper.buildFacetQuery("?QUERY1?")); + assertEquals("title:\\?QUERY1 OR content:\\?QUERY1", + queryHelper.buildFacetQuery("?QUERY1")); + assertEquals("title:\\?QUERY1? OR content:\\?QUERY1?", + queryHelper.buildFacetQuery("?QUERY1?")); + } } public void test_buildFacet_fuzzySearches() { - // ~ + for (String op : new String[] { "AND", "OR" }) { + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); + // ~ - assertEquals("title:QUERY~ OR content:QUERY~", - queryHelper.buildFacetQuery("QUERY~")); - assertEquals( - "(title:QUERY1~ OR content:QUERY1~) (title:QUERY2 OR content:QUERY2)", - queryHelper.buildFacetQuery("QUERY1~ QUERY2")); - assertEquals( - "(title:QUERY1~ OR content:QUERY1~) (title:QUERY2~ OR content:QUERY2~)", - queryHelper.buildFacetQuery("QUERY1~ QUERY2~")); + assertEquals("title:QUERY~ OR content:QUERY~", + queryHelper.buildFacetQuery("QUERY~")); + assertEquals("(title:QUERY1~ OR content:QUERY1~) " + op + + " (title:QUERY2 OR content:QUERY2)", + queryHelper.buildFacetQuery("QUERY1~ QUERY2")); + assertEquals("(title:QUERY1~ OR content:QUERY1~) " + op + + " (title:QUERY2~ OR content:QUERY2~)", + queryHelper.buildFacetQuery("QUERY1~ QUERY2~")); - assertEquals("mimetype:QUERY1~", - queryHelper.buildFacetQuery("mimetype:QUERY1~")); - assertEquals("mimetype:QUERY1~ (title:QUERY2 OR content:QUERY2)", - queryHelper.buildFacetQuery("mimetype:QUERY1~ QUERY2")); + assertEquals("mimetype:QUERY1~", + queryHelper.buildFacetQuery("mimetype:QUERY1~")); + assertEquals("mimetype:QUERY1~ " + op + + " (title:QUERY2 OR content:QUERY2)", + queryHelper.buildFacetQuery("mimetype:QUERY1~ QUERY2")); - assertEquals("title:QUERY1\\ QUERY2~ OR content:QUERY1\\ QUERY2~", - queryHelper.buildFacetQuery("\"QUERY1 QUERY2\"~")); - assertEquals("title:QUERY1~ OR content:QUERY1~", - queryHelper.buildFacetQuery("\"QUERY1~\"")); + assertEquals("title:QUERY1\\ QUERY2~ OR content:QUERY1\\ QUERY2~", + queryHelper.buildFacetQuery("\"QUERY1 QUERY2\"~")); + assertEquals("title:QUERY1~ OR content:QUERY1~", + queryHelper.buildFacetQuery("\"QUERY1~\"")); - // ~0.8 + // ~0.8 - assertEquals("title:QUERY~0.8 OR content:QUERY~0.8", - queryHelper.buildFacetQuery("QUERY~0.8")); - assertEquals( - "(title:QUERY1~0.8 OR content:QUERY1~0.8) (title:QUERY2 OR content:QUERY2)", - queryHelper.buildFacetQuery("QUERY1~0.8 QUERY2")); - assertEquals( - "(title:QUERY1~0.5 OR content:QUERY1~0.5) (title:QUERY2~0.8 OR content:QUERY2~0.8)", - queryHelper.buildFacetQuery("QUERY1~0.5 QUERY2~0.8")); + assertEquals("title:QUERY~0.8 OR content:QUERY~0.8", + queryHelper.buildFacetQuery("QUERY~0.8")); + assertEquals("(title:QUERY1~0.8 OR content:QUERY1~0.8) " + op + + " (title:QUERY2 OR content:QUERY2)", + queryHelper.buildFacetQuery("QUERY1~0.8 QUERY2")); + assertEquals("(title:QUERY1~0.5 OR content:QUERY1~0.5) " + op + + " (title:QUERY2~0.8 OR content:QUERY2~0.8)", + queryHelper.buildFacetQuery("QUERY1~0.5 QUERY2~0.8")); - assertEquals("mimetype:QUERY1~0.8", - queryHelper.buildFacetQuery("mimetype:QUERY1~0.8")); - assertEquals("mimetype:QUERY1~0.8 (title:QUERY2 OR content:QUERY2)", - queryHelper.buildFacetQuery("mimetype:QUERY1~0.8 QUERY2")); + assertEquals("mimetype:QUERY1~0.8", + queryHelper.buildFacetQuery("mimetype:QUERY1~0.8")); + assertEquals("mimetype:QUERY1~0.8 " + op + + " (title:QUERY2 OR content:QUERY2)", + queryHelper.buildFacetQuery("mimetype:QUERY1~0.8 QUERY2")); - assertEquals( - "title:QUERY1\\ QUERY2~0.8 OR content:QUERY1\\ QUERY2~0.8", - queryHelper.buildFacetQuery("\"QUERY1 QUERY2\"~0.8")); - assertEquals("title:QUERY1~0.8 OR content:QUERY1~0.8", - queryHelper.buildFacetQuery("\"QUERY1~0.8\"")); - - assertEquals("title:QUERY1~0.8 OR content:QUERY1~0.8", - queryHelper.buildFacetQuery("\"QUERY1~0.8a\"")); - assertEquals("title:QUERY1~ OR content:QUERY1~", - queryHelper.buildFacetQuery("\"QUERY1~a\"")); + assertEquals( + "title:QUERY1\\ QUERY2~0.8 OR content:QUERY1\\ QUERY2~0.8", + queryHelper.buildFacetQuery("\"QUERY1 QUERY2\"~0.8")); + assertEquals("title:QUERY1~0.8 OR content:QUERY1~0.8", + queryHelper.buildFacetQuery("\"QUERY1~0.8\"")); + assertEquals("title:QUERY1~0.8 OR content:QUERY1~0.8", + queryHelper.buildFacetQuery("\"QUERY1~0.8a\"")); + assertEquals("title:QUERY1~ OR content:QUERY1~", + queryHelper.buildFacetQuery("\"QUERY1~a\"")); + } } public void test_buildFacet_proximitySearches() { - // ~10 - assertEquals("title:\"QUERY\"~10 OR content:\"QUERY\"~10", - queryHelper.buildFacetQuery("QUERY~10")); - assertEquals("title:\"QUERY\"~1 OR content:\"QUERY\"~1", - queryHelper.buildFacetQuery("QUERY~1")); - assertEquals("title:\"QUERY\"~5 OR content:\"QUERY\"~5", - queryHelper.buildFacetQuery("QUERY~5.5")); - assertEquals( - "(title:\"QUERY1\"~10 OR content:\"QUERY1\"~10) (title:QUERY2 OR content:QUERY2)", - queryHelper.buildFacetQuery("QUERY1~10 QUERY2")); - assertEquals( - "(title:\"QUERY1\"~5 OR content:\"QUERY1\"~5) (title:\"QUERY2\"~10 OR content:\"QUERY2\"~10)", - queryHelper.buildFacetQuery("QUERY1~5 QUERY2~10")); + for (String op : new String[] { "AND", "OR" }) { + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); + // ~10 + assertEquals("title:\"QUERY\"~10 OR content:\"QUERY\"~10", + queryHelper.buildFacetQuery("QUERY~10")); + assertEquals("title:\"QUERY\"~1 OR content:\"QUERY\"~1", + queryHelper.buildFacetQuery("QUERY~1")); + assertEquals("title:\"QUERY\"~5 OR content:\"QUERY\"~5", + queryHelper.buildFacetQuery("QUERY~5.5")); + assertEquals("(title:\"QUERY1\"~10 OR content:\"QUERY1\"~10) " + op + + " (title:QUERY2 OR content:QUERY2)", + queryHelper.buildFacetQuery("QUERY1~10 QUERY2")); + assertEquals("(title:\"QUERY1\"~5 OR content:\"QUERY1\"~5) " + op + + " (title:\"QUERY2\"~10 OR content:\"QUERY2\"~10)", + queryHelper.buildFacetQuery("QUERY1~5 QUERY2~10")); - assertEquals("mimetype:\"QUERY1\"~10", - queryHelper.buildFacetQuery("mimetype:QUERY1~10")); - assertEquals("mimetype:\"QUERY1\"~10 (title:QUERY2 OR content:QUERY2)", - queryHelper.buildFacetQuery("mimetype:QUERY1~10 QUERY2")); + assertEquals("mimetype:\"QUERY1\"~10", + queryHelper.buildFacetQuery("mimetype:QUERY1~10")); + assertEquals("mimetype:\"QUERY1\"~10 " + op + + " (title:QUERY2 OR content:QUERY2)", + queryHelper.buildFacetQuery("mimetype:QUERY1~10 QUERY2")); - assertEquals( - "title:\"QUERY1\\ QUERY2\"~10 OR content:\"QUERY1\\ QUERY2\"~10", - queryHelper.buildFacetQuery("\"QUERY1 QUERY2\"~10")); - assertEquals("title:\"QUERY1\"~10 OR content:\"QUERY1\"~10", - queryHelper.buildFacetQuery("\"QUERY1~10\"")); - - assertEquals("title:\"QUERY1\"~10 OR content:\"QUERY1\"~10", - queryHelper.buildFacetQuery("\"QUERY1~10a\"")); + assertEquals( + "title:\"QUERY1\\ QUERY2\"~10 OR content:\"QUERY1\\ QUERY2\"~10", + queryHelper.buildFacetQuery("\"QUERY1 QUERY2\"~10")); + assertEquals("title:\"QUERY1\"~10 OR content:\"QUERY1\"~10", + queryHelper.buildFacetQuery("\"QUERY1~10\"")); + assertEquals("title:\"QUERY1\"~10 OR content:\"QUERY1\"~10", + queryHelper.buildFacetQuery("\"QUERY1~10a\"")); + } } public void test_buildFacet_rangeSearches() { - // mod_date:[20020101 TO 20030101] - assertEquals( - "title:[20020101 TO 20030101] OR content:[20020101 TO 20030101]", - queryHelper.buildFacetQuery("[20020101 TO 20030101]")); - assertEquals("lastModified:[20020101 TO 20030101]", - queryHelper - .buildFacetQuery("lastModified:[20020101 TO 20030101]")); - assertEquals( - "(title:QUERY OR content:QUERY) lastModified:[20020101 TO 20030101]", - queryHelper - .buildFacetQuery("QUERY lastModified:[20020101 TO 20030101]")); + for (String op : new String[] { "AND", "OR" }) { + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); + // mod_date:[20020101 TO 20030101] + assertEquals( + "title:[20020101 TO 20030101] OR content:[20020101 TO 20030101]", + queryHelper.buildFacetQuery("[20020101 TO 20030101]")); + assertEquals( + "lastModified:[20020101 TO 20030101]", + queryHelper + .buildFacetQuery("lastModified:[20020101 TO 20030101]")); + assertEquals( + "(title:QUERY OR content:QUERY) " + op + + " lastModified:[20020101 TO 20030101]", + queryHelper + .buildFacetQuery("QUERY lastModified:[20020101 TO 20030101]")); - // TODO more.. + // TODO more.. - // title:{Aida TO Carmen} - assertEquals("title:{Aida TO Carmen} OR content:{Aida TO Carmen}", - queryHelper.buildFacetQuery("{Aida TO Carmen}")); - assertEquals("lastModified:{Aida TO Carmen}", - queryHelper.buildFacetQuery("lastModified:{Aida TO Carmen}")); - assertEquals("(title:QUERY OR content:QUERY) title:{Aida TO Carmen}", - queryHelper.buildFacetQuery("QUERY title:{Aida TO Carmen}")); + // title:{Aida TO Carmen} + assertEquals("title:{Aida TO Carmen} OR content:{Aida TO Carmen}", + queryHelper.buildFacetQuery("{Aida TO Carmen}")); + assertEquals("lastModified:{Aida TO Carmen}", + queryHelper + .buildFacetQuery("lastModified:{Aida TO Carmen}")); + assertEquals("(title:QUERY OR content:QUERY) " + op + + " title:{Aida TO Carmen}", + queryHelper.buildFacetQuery("QUERY title:{Aida TO Carmen}")); - // TODO more.. + // TODO more.. + } } public void test_buildFacet_boosting() { - // ^1000 ""^1000 - assertEquals("title:QUERY^1000 OR content:QUERY^1000", - queryHelper.buildFacetQuery("QUERY^1000")); - assertEquals( - "(title:QUERY1^1000 OR content:QUERY1^1000) (title:QUERY2 OR content:QUERY2)", - queryHelper.buildFacetQuery("QUERY1^1000 QUERY2")); - assertEquals( - "(title:QUERY1^500 OR content:QUERY1^500) (title:QUERY2^1000 OR content:QUERY2^1000)", - queryHelper.buildFacetQuery("QUERY1^500 QUERY2^1000")); + for (String op : new String[] { "AND", "OR" }) { + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); + // ^1000 ""^1000 + assertEquals("title:QUERY^1000 OR content:QUERY^1000", + queryHelper.buildFacetQuery("QUERY^1000")); + assertEquals("(title:QUERY1^1000 OR content:QUERY1^1000) " + op + + " (title:QUERY2 OR content:QUERY2)", + queryHelper.buildFacetQuery("QUERY1^1000 QUERY2")); + assertEquals("(title:QUERY1^500 OR content:QUERY1^500) " + op + + " (title:QUERY2^1000 OR content:QUERY2^1000)", + queryHelper.buildFacetQuery("QUERY1^500 QUERY2^1000")); - assertEquals("mimetype:QUERY1^1000", - queryHelper.buildFacetQuery("mimetype:QUERY1^1000")); - assertEquals("mimetype:QUERY1^1000 (title:QUERY2 OR content:QUERY2)", - queryHelper.buildFacetQuery("mimetype:QUERY1^1000 QUERY2")); + assertEquals("mimetype:QUERY1^1000", + queryHelper.buildFacetQuery("mimetype:QUERY1^1000")); + assertEquals("mimetype:QUERY1^1000 " + op + + " (title:QUERY2 OR content:QUERY2)", + queryHelper.buildFacetQuery("mimetype:QUERY1^1000 QUERY2")); - assertEquals( - "title:QUERY1\\ QUERY2^1000 OR content:QUERY1\\ QUERY2^1000", - queryHelper.buildFacetQuery("\"QUERY1 QUERY2\"^1000")); - assertEquals("title:QUERY1^1000 OR content:QUERY1^1000", - queryHelper.buildFacetQuery("\"QUERY1^1000\"")); + assertEquals( + "title:QUERY1\\ QUERY2^1000 OR content:QUERY1\\ QUERY2^1000", + queryHelper.buildFacetQuery("\"QUERY1 QUERY2\"^1000")); + assertEquals("title:QUERY1^1000 OR content:QUERY1^1000", + queryHelper.buildFacetQuery("\"QUERY1^1000\"")); + } } public void test_buildFacet_reserved() { @@ -1106,8 +1232,8 @@ public class QueryHelperTest extends S2TestCase { assertEquals( "title:\\" + Constants.RESERVED[i] + " OR content:\\" + Constants.RESERVED[i], - queryHelper.buildFacetQuery("\\" - + Constants.RESERVED[i])); + queryHelper.buildFacetQuery("\\" + + Constants.RESERVED[i])); continue; } else if (Constants.RESERVED[i].equals("{") && e.getMessageCode().equals( @@ -1115,8 +1241,8 @@ public class QueryHelperTest extends S2TestCase { assertEquals( "title:\\" + Constants.RESERVED[i] + " OR content:\\" + Constants.RESERVED[i], - queryHelper.buildFacetQuery("\\" - + Constants.RESERVED[i])); + queryHelper.buildFacetQuery("\\" + + Constants.RESERVED[i])); continue; } else if (Constants.RESERVED[i].equals("[") && e.getMessageCode().equals( @@ -1124,8 +1250,8 @@ public class QueryHelperTest extends S2TestCase { assertEquals( "title:\\" + Constants.RESERVED[i] + " OR content:\\" + Constants.RESERVED[i], - queryHelper.buildFacetQuery("\\" - + Constants.RESERVED[i])); + queryHelper.buildFacetQuery("\\" + + Constants.RESERVED[i])); continue; } else if (Constants.RESERVED[i].equals("(") && e.getMessageCode().equals( @@ -1133,8 +1259,8 @@ public class QueryHelperTest extends S2TestCase { assertEquals( "title:\\" + Constants.RESERVED[i] + " OR content:\\" + Constants.RESERVED[i], - queryHelper.buildFacetQuery("\\" - + Constants.RESERVED[i])); + queryHelper.buildFacetQuery("\\" + + Constants.RESERVED[i])); continue; } } @@ -1144,314 +1270,391 @@ public class QueryHelperTest extends S2TestCase { } public void test_buildFacet_or() { - assertEquals("title:QUERY OR content:QUERY", - queryHelper.buildFacetQuery("OR QUERY")); - assertEquals( - "(title:QUERY1 OR content:QUERY1) OR (title:QUERY2 OR content:QUERY2)", - queryHelper.buildFacetQuery("QUERY1 OR QUERY2")); - assertEquals("title:QUERY", - queryHelper.buildFacetQuery("OR title:QUERY")); - assertEquals("title:QUERY1 OR title:QUERY2", - queryHelper.buildFacetQuery("title:QUERY1 OR title:QUERY2")); - assertEquals("(title:QUERY1 OR content:QUERY1) OR title:QUERY2", - queryHelper.buildFacetQuery("QUERY1 OR title:QUERY2")); - assertEquals("mimetype:QUERY1 OR title:QUERY2", - queryHelper.buildFacetQuery("mimetype:QUERY1 OR title:QUERY2")); - assertEquals( - "(title:QUERY1 OR content:QUERY1) OR (title:QUERY2 OR content:QUERY2) (title:QUERY3 OR content:QUERY3)", - queryHelper.buildFacetQuery("QUERY1 OR QUERY2 QUERY3")); - assertEquals( - "(title:QUERY1 OR content:QUERY1) OR (title:QUERY2 OR content:QUERY2) OR (title:QUERY3 OR content:QUERY3)", - queryHelper.buildFacetQuery("QUERY1 OR QUERY2 OR QUERY3")); + for (String op : new String[] { "AND", "OR" }) { + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); + assertEquals("title:QUERY OR content:QUERY", + queryHelper.buildFacetQuery("OR QUERY")); + assertEquals( + "(title:QUERY1 OR content:QUERY1) OR (title:QUERY2 OR content:QUERY2)", + queryHelper.buildFacetQuery("QUERY1 OR QUERY2")); + assertEquals("title:QUERY", + queryHelper.buildFacetQuery("OR title:QUERY")); + assertEquals("title:QUERY1 OR title:QUERY2", + queryHelper.buildFacetQuery("title:QUERY1 OR title:QUERY2")); + assertEquals("(title:QUERY1 OR content:QUERY1) OR title:QUERY2", + queryHelper.buildFacetQuery("QUERY1 OR title:QUERY2")); + assertEquals("mimetype:QUERY1 OR title:QUERY2", + queryHelper + .buildFacetQuery("mimetype:QUERY1 OR title:QUERY2")); + assertEquals( + "(title:QUERY1 OR content:QUERY1) OR (title:QUERY2 OR content:QUERY2) " + + op + " (title:QUERY3 OR content:QUERY3)", + queryHelper.buildFacetQuery("QUERY1 OR QUERY2 QUERY3")); + assertEquals( + "(title:QUERY1 OR content:QUERY1) OR (title:QUERY2 OR content:QUERY2) OR (title:QUERY3 OR content:QUERY3)", + queryHelper.buildFacetQuery("QUERY1 OR QUERY2 OR QUERY3")); + } } public void test_buildFacet_and() { - assertEquals("title:QUERY OR content:QUERY", - queryHelper.buildFacetQuery("AND QUERY")); - assertEquals( - "(title:QUERY1 OR content:QUERY1) AND (title:QUERY2 OR content:QUERY2)", - queryHelper.buildFacetQuery("QUERY1 AND QUERY2")); - assertEquals("title:QUERY", - queryHelper.buildFacetQuery("AND title:QUERY")); - assertEquals("title:QUERY1 AND title:QUERY2", - queryHelper.buildFacetQuery("title:QUERY1 AND title:QUERY2")); - assertEquals("(title:QUERY1 OR content:QUERY1) AND title:QUERY2", - queryHelper.buildFacetQuery("QUERY1 AND title:QUERY2")); - assertEquals("mimetype:QUERY1 AND title:QUERY2", - queryHelper.buildFacetQuery("mimetype:QUERY1 AND title:QUERY2")); - assertEquals( - "(title:QUERY1 OR content:QUERY1) AND (title:QUERY2 OR content:QUERY2) (title:QUERY3 OR content:QUERY3)", - queryHelper.buildFacetQuery("QUERY1 AND QUERY2 QUERY3")); - assertEquals( - "(title:QUERY1 OR content:QUERY1) (title:QUERY2 OR content:QUERY2) AND (title:QUERY3 OR content:QUERY3)", - queryHelper.buildFacetQuery("QUERY1 QUERY2 AND QUERY3")); - assertEquals( - "(title:QUERY1 OR content:QUERY1) AND (title:QUERY2 OR content:QUERY2) AND (title:QUERY3 OR content:QUERY3)", - queryHelper.buildFacetQuery("QUERY1 AND QUERY2 AND QUERY3")); + for (String op : new String[] { "AND", "OR" }) { + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); + assertEquals("title:QUERY OR content:QUERY", + queryHelper.buildFacetQuery("AND QUERY")); + assertEquals( + "(title:QUERY1 OR content:QUERY1) AND (title:QUERY2 OR content:QUERY2)", + queryHelper.buildFacetQuery("QUERY1 AND QUERY2")); + assertEquals("title:QUERY", + queryHelper.buildFacetQuery("AND title:QUERY")); + assertEquals("title:QUERY1 AND title:QUERY2", + queryHelper + .buildFacetQuery("title:QUERY1 AND title:QUERY2")); + assertEquals("(title:QUERY1 OR content:QUERY1) AND title:QUERY2", + queryHelper.buildFacetQuery("QUERY1 AND title:QUERY2")); + assertEquals( + "mimetype:QUERY1 AND title:QUERY2", + queryHelper + .buildFacetQuery("mimetype:QUERY1 AND title:QUERY2")); + assertEquals( + "(title:QUERY1 OR content:QUERY1) AND (title:QUERY2 OR content:QUERY2) " + + op + " (title:QUERY3 OR content:QUERY3)", + queryHelper.buildFacetQuery("QUERY1 AND QUERY2 QUERY3")); + assertEquals( + "(title:QUERY1 OR content:QUERY1) " + + op + + " (title:QUERY2 OR content:QUERY2) AND (title:QUERY3 OR content:QUERY3)", + queryHelper.buildFacetQuery("QUERY1 QUERY2 AND QUERY3")); + assertEquals( + "(title:QUERY1 OR content:QUERY1) AND (title:QUERY2 OR content:QUERY2) AND (title:QUERY3 OR content:QUERY3)", + queryHelper.buildFacetQuery("QUERY1 AND QUERY2 AND QUERY3")); + } } public void test_buildFacet_not() { - assertEquals("NOT (title:QUERY OR content:QUERY)", - queryHelper.buildFacetQuery("NOT QUERY")); - assertEquals("NOT title:QUERY", - queryHelper.buildFacetQuery("NOT title:QUERY")); - assertEquals( - "(title:QUERY2 OR content:QUERY2) NOT (title:QUERY1 OR content:QUERY1)", - queryHelper.buildFacetQuery("NOT QUERY1 QUERY2")); - assertEquals( - "(title:QUERY2 OR content:QUERY2) NOT (title:QUERY1 OR content:QUERY1)", - queryHelper.buildFacetQuery("NOT QUERY1 OR QUERY2")); - assertEquals( - "NOT (title:QUERY1 OR content:QUERY1) NOT (title:QUERY2 OR content:QUERY2)", - queryHelper.buildFacetQuery("NOT QUERY1 NOT QUERY2")); - assertEquals( - "NOT (title:QUERY1 OR content:QUERY1) NOT (title:QUERY2 OR content:QUERY2)", - queryHelper.buildFacetQuery("NOT QUERY1 OR NOT QUERY2")); - assertEquals( - "(title:QUERY2 OR content:QUERY2) NOT (title:QUERY1 OR content:QUERY1) NOT (title:QUERY3 OR content:QUERY3)", - queryHelper.buildFacetQuery("NOT QUERY1 QUERY2 NOT QUERY3")); - assertEquals("NOT mimetype:QUERY", - queryHelper.buildFacetQuery("NOT mimetype:QUERY")); - assertEquals( - "NOT mimetype:QUERY1 NOT title:QUERY2", - queryHelper - .buildFacetQuery("NOT mimetype:QUERY1 NOT title:QUERY2")); - assertEquals("(title:QUERY2 OR content:QUERY2) NOT mimetype:QUERY1", - queryHelper.buildFacetQuery("NOT mimetype:QUERY1 QUERY2")); - assertEquals("mimetype:QUERY2 NOT (title:QUERY1 OR content:QUERY1)", - queryHelper.buildFacetQuery("NOT QUERY1 mimetype:QUERY2")); - + for (String op : new String[] { "AND", "OR" }) { + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); + assertEquals("NOT (title:QUERY OR content:QUERY)", + queryHelper.buildFacetQuery("NOT QUERY")); + assertEquals("NOT title:QUERY", + queryHelper.buildFacetQuery("NOT title:QUERY")); + assertEquals("(title:QUERY2 OR content:QUERY2) " + op + + " NOT (title:QUERY1 OR content:QUERY1)", + queryHelper.buildFacetQuery("NOT QUERY1 QUERY2")); + assertEquals("(title:QUERY2 OR content:QUERY2) " + op + + " NOT (title:QUERY1 OR content:QUERY1)", + queryHelper.buildFacetQuery("NOT QUERY1 OR QUERY2")); + assertEquals("NOT (title:QUERY1 OR content:QUERY1) " + op + + " NOT (title:QUERY2 OR content:QUERY2)", + queryHelper.buildFacetQuery("NOT QUERY1 NOT QUERY2")); + assertEquals("NOT (title:QUERY1 OR content:QUERY1) " + op + + " NOT (title:QUERY2 OR content:QUERY2)", + queryHelper.buildFacetQuery("NOT QUERY1 OR NOT QUERY2")); + assertEquals("(title:QUERY2 OR content:QUERY2) " + op + + " NOT (title:QUERY1 OR content:QUERY1) " + op + + " NOT (title:QUERY3 OR content:QUERY3)", + queryHelper.buildFacetQuery("NOT QUERY1 QUERY2 NOT QUERY3")); + assertEquals("NOT mimetype:QUERY", + queryHelper.buildFacetQuery("NOT mimetype:QUERY")); + assertEquals( + "NOT mimetype:QUERY1 " + op + " NOT title:QUERY2", + queryHelper + .buildFacetQuery("NOT mimetype:QUERY1 NOT title:QUERY2")); + assertEquals("(title:QUERY2 OR content:QUERY2) " + op + + " NOT mimetype:QUERY1", + queryHelper.buildFacetQuery("NOT mimetype:QUERY1 QUERY2")); + assertEquals("mimetype:QUERY2 " + op + + " NOT (title:QUERY1 OR content:QUERY1)", + queryHelper.buildFacetQuery("NOT QUERY1 mimetype:QUERY2")); + } } public void test_inner_query() { - assertEquals("(title:bbb OR content:bbb) (title:ccc OR content:ccc)", - queryHelper.buildQuery("(bbb ccc)").getQuery()); - assertEquals( - "(title:bbb OR content:bbb) OR (title:ccc OR content:ccc)", - queryHelper.buildQuery("(bbb OR ccc)").getQuery()); - assertEquals( - "(title:bbb OR content:bbb) AND (title:ccc OR content:ccc)", - queryHelper.buildQuery("(bbb AND ccc)").getQuery()); + for (String op : new String[] { "AND", "OR" }) { + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); + assertEquals("(title:bbb OR content:bbb) " + op + + " (title:ccc OR content:ccc)", + queryHelper.buildQuery("(bbb ccc)").getQuery()); + assertEquals( + "(title:bbb OR content:bbb) OR (title:ccc OR content:ccc)", + queryHelper.buildQuery("(bbb OR ccc)").getQuery()); + assertEquals( + "(title:bbb OR content:bbb) AND (title:ccc OR content:ccc)", + queryHelper.buildQuery("(bbb AND ccc)").getQuery()); - assertEquals( - "(title:aaa OR content:aaa) ((title:bbb OR content:bbb) (title:ccc OR content:ccc))", - queryHelper.buildQuery("aaa (bbb ccc)").getQuery()); - assertEquals( - "(title:aaa OR content:aaa) ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc))", - queryHelper.buildQuery("aaa (bbb AND ccc)").getQuery()); - assertEquals( - "(title:aaa OR content:aaa) AND ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc))", - queryHelper.buildQuery("aaa AND (bbb AND ccc)").getQuery()); - assertEquals( - "(title:aaa OR content:aaa) OR ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc))", - queryHelper.buildQuery("aaa OR (bbb AND ccc)").getQuery()); + assertEquals("(title:aaa OR content:aaa) " + op + + " ((title:bbb OR content:bbb) " + op + + " (title:ccc OR content:ccc))", + queryHelper.buildQuery("aaa (bbb ccc)").getQuery()); + assertEquals( + "(title:aaa OR content:aaa) " + + op + + " ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc))", + queryHelper.buildQuery("aaa (bbb AND ccc)").getQuery()); + assertEquals( + "(title:aaa OR content:aaa) AND ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc))", + queryHelper.buildQuery("aaa AND (bbb AND ccc)").getQuery()); + assertEquals( + "(title:aaa OR content:aaa) OR ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc))", + queryHelper.buildQuery("aaa OR (bbb AND ccc)").getQuery()); - assertEquals( - "(title:aaa OR content:aaa) ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc))", - queryHelper.buildQuery("aaa (bbb OR ccc)").getQuery()); - assertEquals( - "(title:aaa OR content:aaa) AND ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc))", - queryHelper.buildQuery("aaa AND (bbb OR ccc)").getQuery()); - assertEquals( - "(title:aaa OR content:aaa) OR ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc))", - queryHelper.buildQuery("aaa OR (bbb OR ccc)").getQuery()); + assertEquals( + "(title:aaa OR content:aaa) " + + op + + " ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc))", + queryHelper.buildQuery("aaa (bbb OR ccc)").getQuery()); + assertEquals( + "(title:aaa OR content:aaa) AND ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc))", + queryHelper.buildQuery("aaa AND (bbb OR ccc)").getQuery()); + assertEquals( + "(title:aaa OR content:aaa) OR ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc))", + queryHelper.buildQuery("aaa OR (bbb OR ccc)").getQuery()); - assertEquals( - "((title:bbb OR content:bbb) (title:ccc OR content:ccc)) (title:ddd OR content:ddd)", - queryHelper.buildQuery("(bbb ccc) ddd").getQuery()); - assertEquals( - "((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) (title:ddd OR content:ddd)", - queryHelper.buildQuery("(bbb AND ccc) ddd").getQuery()); - assertEquals( - "((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) AND (title:ddd OR content:ddd)", - queryHelper.buildQuery("(bbb AND ccc) AND ddd").getQuery()); - assertEquals( - "((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) OR (title:ddd OR content:ddd)", - queryHelper.buildQuery("(bbb AND ccc) OR ddd").getQuery()); + assertEquals("((title:bbb OR content:bbb) " + op + + " (title:ccc OR content:ccc)) " + op + + " (title:ddd OR content:ddd)", + queryHelper.buildQuery("(bbb ccc) ddd").getQuery()); + assertEquals( + "((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) " + + op + " (title:ddd OR content:ddd)", queryHelper + .buildQuery("(bbb AND ccc) ddd").getQuery()); + assertEquals( + "((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) AND (title:ddd OR content:ddd)", + queryHelper.buildQuery("(bbb AND ccc) AND ddd").getQuery()); + assertEquals( + "((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) OR (title:ddd OR content:ddd)", + queryHelper.buildQuery("(bbb AND ccc) OR ddd").getQuery()); - assertEquals( - "((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) (title:ddd OR content:ddd)", - queryHelper.buildQuery("(bbb OR ccc) ddd").getQuery()); - assertEquals( - "((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) AND (title:ddd OR content:ddd)", - queryHelper.buildQuery("(bbb OR ccc) AND ddd").getQuery()); - assertEquals( - "((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) OR (title:ddd OR content:ddd)", - queryHelper.buildQuery("(bbb OR ccc) OR ddd").getQuery()); + assertEquals( + "((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) " + + op + " (title:ddd OR content:ddd)", queryHelper + .buildQuery("(bbb OR ccc) ddd").getQuery()); + assertEquals( + "((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) AND (title:ddd OR content:ddd)", + queryHelper.buildQuery("(bbb OR ccc) AND ddd").getQuery()); + assertEquals( + "((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) OR (title:ddd OR content:ddd)", + queryHelper.buildQuery("(bbb OR ccc) OR ddd").getQuery()); - assertEquals( - "(title:aaa OR content:aaa) ((title:bbb OR content:bbb) (title:ccc OR content:ccc)) (title:ddd OR content:ddd)", - queryHelper.buildQuery("aaa (bbb ccc) ddd").getQuery()); - assertEquals( - "(title:aaa OR content:aaa) ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) (title:ddd OR content:ddd)", - queryHelper.buildQuery("aaa (bbb AND ccc) ddd").getQuery()); - assertEquals( - "(title:aaa OR content:aaa) AND ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) AND (title:ddd OR content:ddd)", - queryHelper.buildQuery("aaa AND (bbb AND ccc) AND ddd") - .getQuery()); - assertEquals( - "(title:aaa OR content:aaa) OR ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) OR (title:ddd OR content:ddd)", - queryHelper.buildQuery("aaa OR (bbb AND ccc) OR ddd") - .getQuery()); + assertEquals("(title:aaa OR content:aaa) " + op + + " ((title:bbb OR content:bbb) " + op + + " (title:ccc OR content:ccc)) " + op + + " (title:ddd OR content:ddd)", + queryHelper.buildQuery("aaa (bbb ccc) ddd").getQuery()); + assertEquals( + "(title:aaa OR content:aaa) " + + op + + " ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) " + + op + " (title:ddd OR content:ddd)", queryHelper + .buildQuery("aaa (bbb AND ccc) ddd").getQuery()); + assertEquals( + "(title:aaa OR content:aaa) AND ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) AND (title:ddd OR content:ddd)", + queryHelper.buildQuery("aaa AND (bbb AND ccc) AND ddd") + .getQuery()); + assertEquals( + "(title:aaa OR content:aaa) OR ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) OR (title:ddd OR content:ddd)", + queryHelper.buildQuery("aaa OR (bbb AND ccc) OR ddd") + .getQuery()); - assertEquals( - "(title:aaa OR content:aaa) ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) (title:ddd OR content:ddd)", - queryHelper.buildQuery("aaa (bbb OR ccc) ddd").getQuery()); - assertEquals( - "(title:aaa OR content:aaa) AND ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) AND (title:ddd OR content:ddd)", - queryHelper.buildQuery("aaa AND (bbb OR ccc) AND ddd") - .getQuery()); - assertEquals( - "(title:aaa OR content:aaa) OR ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) OR (title:ddd OR content:ddd)", - queryHelper.buildQuery("aaa OR (bbb OR ccc) OR ddd").getQuery()); + assertEquals( + "(title:aaa OR content:aaa) " + + op + + " ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) " + + op + " (title:ddd OR content:ddd)", queryHelper + .buildQuery("aaa (bbb OR ccc) ddd").getQuery()); + assertEquals( + "(title:aaa OR content:aaa) AND ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) AND (title:ddd OR content:ddd)", + queryHelper.buildQuery("aaa AND (bbb OR ccc) AND ddd") + .getQuery()); + assertEquals( + "(title:aaa OR content:aaa) OR ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) OR (title:ddd OR content:ddd)", + queryHelper.buildQuery("aaa OR (bbb OR ccc) OR ddd") + .getQuery()); - assertEquals( - "(title:aaa OR content:aaa) (label:bbb (title:ccc OR content:ccc))", - queryHelper.buildQuery("aaa (label:bbb ccc)").getQuery()); - assertEquals( - "(title:aaa OR content:aaa) (label:bbb AND (title:ccc OR content:ccc))", - queryHelper.buildQuery("aaa (label:bbb AND ccc)").getQuery()); - assertEquals( - "(title:aaa OR content:aaa) (label:bbb OR (title:ccc OR content:ccc))", - queryHelper.buildQuery("aaa (label:bbb OR ccc)").getQuery()); + assertEquals("(title:aaa OR content:aaa) " + op + " (label:bbb " + + op + " (title:ccc OR content:ccc))", queryHelper + .buildQuery("aaa (label:bbb ccc)").getQuery()); + assertEquals("(title:aaa OR content:aaa) " + op + + " (label:bbb AND (title:ccc OR content:ccc))", + queryHelper.buildQuery("aaa (label:bbb AND ccc)") + .getQuery()); + assertEquals("(title:aaa OR content:aaa) " + op + + " (label:bbb OR (title:ccc OR content:ccc))", queryHelper + .buildQuery("aaa (label:bbb OR ccc)").getQuery()); - assertEquals( - "(title:aaa OR content:aaa) ((title:bbb OR content:bbb) label:ccc)", - queryHelper.buildQuery("aaa (bbb label:ccc)").getQuery()); - assertEquals( - "(title:aaa OR content:aaa) ((title:bbb OR content:bbb) AND label:ccc)", - queryHelper.buildQuery("aaa (bbb AND label:ccc)").getQuery()); - assertEquals( - "(title:aaa OR content:aaa) ((title:bbb OR content:bbb) OR label:ccc)", - queryHelper.buildQuery("aaa (bbb OR label:ccc)").getQuery()); - - assertEquals( - "(title:aaa OR content:aaa) ((title:bbb OR content:bbb) NOT (title:ccc OR content:ccc))", - queryHelper.buildQuery("aaa (bbb NOT ccc)").getQuery()); + assertEquals("(title:aaa OR content:aaa) " + op + + " ((title:bbb OR content:bbb) " + op + " label:ccc)", + queryHelper.buildQuery("aaa (bbb label:ccc)").getQuery()); + assertEquals("(title:aaa OR content:aaa) " + op + + " ((title:bbb OR content:bbb) AND label:ccc)", + queryHelper.buildQuery("aaa (bbb AND label:ccc)") + .getQuery()); + assertEquals("(title:aaa OR content:aaa) " + op + + " ((title:bbb OR content:bbb) OR label:ccc)", queryHelper + .buildQuery("aaa (bbb OR label:ccc)").getQuery()); + assertEquals("(title:aaa OR content:aaa) " + op + + " ((title:bbb OR content:bbb) " + op + + " NOT (title:ccc OR content:ccc))", queryHelper + .buildQuery("aaa (bbb NOT ccc)").getQuery()); + } } public void test_more_inner_query() { - assertEquals( - "(title:aaa OR content:aaa) ((title:bbb OR content:bbb) ((title:ccc OR content:ccc) (title:ddd OR content:ddd)))", - queryHelper.buildQuery("aaa (bbb (ccc ddd))").getQuery()); - assertEquals( - "(((title:aaa OR content:aaa) (title:bbb OR content:bbb)) (title:ccc OR content:ccc)) (title:ddd OR content:ddd)", - queryHelper.buildQuery("((aaa bbb) ccc) ddd").getQuery()); + for (String op : new String[] { "AND", "OR" }) { + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); + assertEquals("(title:aaa OR content:aaa) " + op + + " ((title:bbb OR content:bbb) " + op + + " ((title:ccc OR content:ccc) " + op + + " (title:ddd OR content:ddd)))", + queryHelper.buildQuery("aaa (bbb (ccc ddd))").getQuery()); + assertEquals("(((title:aaa OR content:aaa) " + op + + " (title:bbb OR content:bbb)) " + op + + " (title:ccc OR content:ccc)) " + op + + " (title:ddd OR content:ddd)", + queryHelper.buildQuery("((aaa bbb) ccc) ddd").getQuery()); + } } public void test_inner_facetQuery() { - assertEquals("(title:bbb OR content:bbb) (title:ccc OR content:ccc)", - queryHelper.buildFacetQuery("(bbb ccc)")); - assertEquals( - "(title:bbb OR content:bbb) OR (title:ccc OR content:ccc)", - queryHelper.buildFacetQuery("(bbb OR ccc)")); - assertEquals( - "(title:bbb OR content:bbb) AND (title:ccc OR content:ccc)", - queryHelper.buildFacetQuery("(bbb AND ccc)")); + for (String op : new String[] { "AND", "OR" }) { + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); + assertEquals("(title:bbb OR content:bbb) " + op + + " (title:ccc OR content:ccc)", + queryHelper.buildFacetQuery("(bbb ccc)")); + assertEquals( + "(title:bbb OR content:bbb) OR (title:ccc OR content:ccc)", + queryHelper.buildFacetQuery("(bbb OR ccc)")); + assertEquals( + "(title:bbb OR content:bbb) AND (title:ccc OR content:ccc)", + queryHelper.buildFacetQuery("(bbb AND ccc)")); - assertEquals( - "(title:aaa OR content:aaa) ((title:bbb OR content:bbb) (title:ccc OR content:ccc))", - queryHelper.buildFacetQuery("aaa (bbb ccc)")); - assertEquals( - "(title:aaa OR content:aaa) ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc))", - queryHelper.buildFacetQuery("aaa (bbb AND ccc)")); - assertEquals( - "(title:aaa OR content:aaa) AND ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc))", - queryHelper.buildFacetQuery("aaa AND (bbb AND ccc)")); - assertEquals( - "(title:aaa OR content:aaa) OR ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc))", - queryHelper.buildFacetQuery("aaa OR (bbb AND ccc)")); + assertEquals("(title:aaa OR content:aaa) " + op + + " ((title:bbb OR content:bbb) " + op + + " (title:ccc OR content:ccc))", + queryHelper.buildFacetQuery("aaa (bbb ccc)")); + assertEquals( + "(title:aaa OR content:aaa) " + + op + + " ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc))", + queryHelper.buildFacetQuery("aaa (bbb AND ccc)")); + assertEquals( + "(title:aaa OR content:aaa) AND ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc))", + queryHelper.buildFacetQuery("aaa AND (bbb AND ccc)")); + assertEquals( + "(title:aaa OR content:aaa) OR ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc))", + queryHelper.buildFacetQuery("aaa OR (bbb AND ccc)")); - assertEquals( - "(title:aaa OR content:aaa) ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc))", - queryHelper.buildFacetQuery("aaa (bbb OR ccc)")); - assertEquals( - "(title:aaa OR content:aaa) AND ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc))", - queryHelper.buildFacetQuery("aaa AND (bbb OR ccc)")); - assertEquals( - "(title:aaa OR content:aaa) OR ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc))", - queryHelper.buildFacetQuery("aaa OR (bbb OR ccc)")); + assertEquals( + "(title:aaa OR content:aaa) " + + op + + " ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc))", + queryHelper.buildFacetQuery("aaa (bbb OR ccc)")); + assertEquals( + "(title:aaa OR content:aaa) AND ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc))", + queryHelper.buildFacetQuery("aaa AND (bbb OR ccc)")); + assertEquals( + "(title:aaa OR content:aaa) OR ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc))", + queryHelper.buildFacetQuery("aaa OR (bbb OR ccc)")); - assertEquals( - "((title:bbb OR content:bbb) (title:ccc OR content:ccc)) (title:ddd OR content:ddd)", - queryHelper.buildFacetQuery("(bbb ccc) ddd")); - assertEquals( - "((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) (title:ddd OR content:ddd)", - queryHelper.buildFacetQuery("(bbb AND ccc) ddd")); - assertEquals( - "((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) AND (title:ddd OR content:ddd)", - queryHelper.buildFacetQuery("(bbb AND ccc) AND ddd")); - assertEquals( - "((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) OR (title:ddd OR content:ddd)", - queryHelper.buildFacetQuery("(bbb AND ccc) OR ddd")); + assertEquals("((title:bbb OR content:bbb) " + op + + " (title:ccc OR content:ccc)) " + op + + " (title:ddd OR content:ddd)", + queryHelper.buildFacetQuery("(bbb ccc) ddd")); + assertEquals( + "((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) " + + op + " (title:ddd OR content:ddd)", + queryHelper.buildFacetQuery("(bbb AND ccc) ddd")); + assertEquals( + "((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) AND (title:ddd OR content:ddd)", + queryHelper.buildFacetQuery("(bbb AND ccc) AND ddd")); + assertEquals( + "((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) OR (title:ddd OR content:ddd)", + queryHelper.buildFacetQuery("(bbb AND ccc) OR ddd")); - assertEquals( - "((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) (title:ddd OR content:ddd)", - queryHelper.buildFacetQuery("(bbb OR ccc) ddd")); - assertEquals( - "((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) AND (title:ddd OR content:ddd)", - queryHelper.buildFacetQuery("(bbb OR ccc) AND ddd")); - assertEquals( - "((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) OR (title:ddd OR content:ddd)", - queryHelper.buildFacetQuery("(bbb OR ccc) OR ddd")); + assertEquals( + "((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) " + + op + " (title:ddd OR content:ddd)", + queryHelper.buildFacetQuery("(bbb OR ccc) ddd")); + assertEquals( + "((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) AND (title:ddd OR content:ddd)", + queryHelper.buildFacetQuery("(bbb OR ccc) AND ddd")); + assertEquals( + "((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) OR (title:ddd OR content:ddd)", + queryHelper.buildFacetQuery("(bbb OR ccc) OR ddd")); - assertEquals( - "(title:aaa OR content:aaa) ((title:bbb OR content:bbb) (title:ccc OR content:ccc)) (title:ddd OR content:ddd)", - queryHelper.buildFacetQuery("aaa (bbb ccc) ddd")); - assertEquals( - "(title:aaa OR content:aaa) ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) (title:ddd OR content:ddd)", - queryHelper.buildFacetQuery("aaa (bbb AND ccc) ddd")); - assertEquals( - "(title:aaa OR content:aaa) AND ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) AND (title:ddd OR content:ddd)", - queryHelper.buildFacetQuery("aaa AND (bbb AND ccc) AND ddd")); - assertEquals( - "(title:aaa OR content:aaa) OR ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) OR (title:ddd OR content:ddd)", - queryHelper.buildFacetQuery("aaa OR (bbb AND ccc) OR ddd")); + assertEquals("(title:aaa OR content:aaa) " + op + + " ((title:bbb OR content:bbb) " + op + + " (title:ccc OR content:ccc)) " + op + + " (title:ddd OR content:ddd)", + queryHelper.buildFacetQuery("aaa (bbb ccc) ddd")); + assertEquals( + "(title:aaa OR content:aaa) " + + op + + " ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) " + + op + " (title:ddd OR content:ddd)", + queryHelper.buildFacetQuery("aaa (bbb AND ccc) ddd")); + assertEquals( + "(title:aaa OR content:aaa) AND ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) AND (title:ddd OR content:ddd)", + queryHelper + .buildFacetQuery("aaa AND (bbb AND ccc) AND ddd")); + assertEquals( + "(title:aaa OR content:aaa) OR ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) OR (title:ddd OR content:ddd)", + queryHelper.buildFacetQuery("aaa OR (bbb AND ccc) OR ddd")); - assertEquals( - "(title:aaa OR content:aaa) ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) (title:ddd OR content:ddd)", - queryHelper.buildFacetQuery("aaa (bbb OR ccc) ddd")); - assertEquals( - "(title:aaa OR content:aaa) AND ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) AND (title:ddd OR content:ddd)", - queryHelper.buildFacetQuery("aaa AND (bbb OR ccc) AND ddd")); - assertEquals( - "(title:aaa OR content:aaa) OR ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) OR (title:ddd OR content:ddd)", - queryHelper.buildFacetQuery("aaa OR (bbb OR ccc) OR ddd")); + assertEquals( + "(title:aaa OR content:aaa) " + + op + + " ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) " + + op + " (title:ddd OR content:ddd)", + queryHelper.buildFacetQuery("aaa (bbb OR ccc) ddd")); + assertEquals( + "(title:aaa OR content:aaa) AND ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) AND (title:ddd OR content:ddd)", + queryHelper.buildFacetQuery("aaa AND (bbb OR ccc) AND ddd")); + assertEquals( + "(title:aaa OR content:aaa) OR ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) OR (title:ddd OR content:ddd)", + queryHelper.buildFacetQuery("aaa OR (bbb OR ccc) OR ddd")); - assertEquals( - "(title:aaa OR content:aaa) (label:bbb (title:ccc OR content:ccc))", - queryHelper.buildFacetQuery("aaa (label:bbb ccc)")); - assertEquals( - "(title:aaa OR content:aaa) (label:bbb AND (title:ccc OR content:ccc))", - queryHelper.buildFacetQuery("aaa (label:bbb AND ccc)")); - assertEquals( - "(title:aaa OR content:aaa) (label:bbb OR (title:ccc OR content:ccc))", - queryHelper.buildFacetQuery("aaa (label:bbb OR ccc)")); + assertEquals("(title:aaa OR content:aaa) " + op + " (label:bbb " + + op + " (title:ccc OR content:ccc))", + queryHelper.buildFacetQuery("aaa (label:bbb ccc)")); + assertEquals("(title:aaa OR content:aaa) " + op + + " (label:bbb AND (title:ccc OR content:ccc))", + queryHelper.buildFacetQuery("aaa (label:bbb AND ccc)")); + assertEquals("(title:aaa OR content:aaa) " + op + + " (label:bbb OR (title:ccc OR content:ccc))", + queryHelper.buildFacetQuery("aaa (label:bbb OR ccc)")); - assertEquals( - "(title:aaa OR content:aaa) ((title:bbb OR content:bbb) label:ccc)", - queryHelper.buildFacetQuery("aaa (bbb label:ccc)")); - assertEquals( - "(title:aaa OR content:aaa) ((title:bbb OR content:bbb) AND label:ccc)", - queryHelper.buildFacetQuery("aaa (bbb AND label:ccc)")); - assertEquals( - "(title:aaa OR content:aaa) ((title:bbb OR content:bbb) OR label:ccc)", - queryHelper.buildFacetQuery("aaa (bbb OR label:ccc)")); - - assertEquals( - "(title:aaa OR content:aaa) ((title:bbb OR content:bbb) NOT (title:ccc OR content:ccc))", - queryHelper.buildFacetQuery("aaa (bbb NOT ccc)")); + assertEquals("(title:aaa OR content:aaa) " + op + + " ((title:bbb OR content:bbb) " + op + " label:ccc)", + queryHelper.buildFacetQuery("aaa (bbb label:ccc)")); + assertEquals("(title:aaa OR content:aaa) " + op + + " ((title:bbb OR content:bbb) AND label:ccc)", + queryHelper.buildFacetQuery("aaa (bbb AND label:ccc)")); + assertEquals("(title:aaa OR content:aaa) " + op + + " ((title:bbb OR content:bbb) OR label:ccc)", + queryHelper.buildFacetQuery("aaa (bbb OR label:ccc)")); + assertEquals("(title:aaa OR content:aaa) " + op + + " ((title:bbb OR content:bbb) " + op + + " NOT (title:ccc OR content:ccc))", + queryHelper.buildFacetQuery("aaa (bbb NOT ccc)")); + } } public void test_more_inner_facetQuery() { - assertEquals( - "(title:aaa OR content:aaa) ((title:bbb OR content:bbb) ((title:ccc OR content:ccc) (title:ddd OR content:ddd)))", - queryHelper.buildFacetQuery("aaa (bbb (ccc ddd))")); - assertEquals( - "(((title:aaa OR content:aaa) (title:bbb OR content:bbb)) (title:ccc OR content:ccc)) (title:ddd OR content:ddd)", - queryHelper.buildFacetQuery("((aaa bbb) ccc) ddd")); + for (String op : new String[] { "AND", "OR" }) { + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); + assertEquals("(title:aaa OR content:aaa) " + op + + " ((title:bbb OR content:bbb) " + op + + " ((title:ccc OR content:ccc) " + op + + " (title:ddd OR content:ddd)))", + queryHelper.buildFacetQuery("aaa (bbb (ccc ddd))")); + assertEquals("(((title:aaa OR content:aaa) " + op + + " (title:bbb OR content:bbb)) " + op + + " (title:ccc OR content:ccc)) " + op + + " (title:ddd OR content:ddd)", + queryHelper.buildFacetQuery("((aaa bbb) ccc) ddd")); + } } public void test_quote_query() { @@ -1700,29 +1903,39 @@ public class QueryHelperTest extends S2TestCase { .getRequest(); request.setLocale(Locale.JAPAN); - assertEquals("", queryHelper.buildQuery("").getQuery()); + for (String op : new String[] { "AND", "OR" }) { + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); + assertEquals("", queryHelper.buildQuery("").getQuery()); - assertEquals("title:QUERY OR content:QUERY OR content_ja:QUERY", - queryHelper.buildQuery("QUERY").getQuery()); - assertEquals("title:QUERY OR content:QUERY OR content_ja:QUERY", - queryHelper.buildQuery("QUERY ").getQuery()); - assertEquals("title:QUERY OR content:QUERY OR content_ja:QUERY", - queryHelper.buildQuery(" QUERY").getQuery()); + assertEquals("title:QUERY OR content:QUERY OR content_ja:QUERY", + queryHelper.buildQuery("QUERY").getQuery()); + assertEquals("title:QUERY OR content:QUERY OR content_ja:QUERY", + queryHelper.buildQuery("QUERY ").getQuery()); + assertEquals("title:QUERY OR content:QUERY OR content_ja:QUERY", + queryHelper.buildQuery(" QUERY").getQuery()); - assertEquals( - "(title:QUERY1 OR content:QUERY1 OR content_ja:QUERY1) NOT (title:QUERY2 OR content:QUERY2 OR content_ja:QUERY2)", - queryHelper.buildQuery("QUERY1 NOT QUERY2").getQuery()); - - assertEquals( - "(title:QUERY1 OR content:QUERY1 OR content_ja:QUERY1) (title:QUERY2 OR content:QUERY2 OR content_ja:QUERY2)", - queryHelper.buildQuery("QUERY1 QUERY2").getQuery()); - assertEquals( - "(title:QUERY1 OR content:QUERY1 OR content_ja:QUERY1) (title:QUERY2 OR content:QUERY2 OR content_ja:QUERY2)", - queryHelper.buildQuery("QUERY1 QUERY2 ").getQuery()); - assertEquals( - "(title:QUERY1 OR content:QUERY1 OR content_ja:QUERY1) (title:QUERY2 OR content:QUERY2 OR content_ja:QUERY2)", - queryHelper.buildQuery(" QUERY1 QUERY2").getQuery()); + assertEquals( + "(title:QUERY1 OR content:QUERY1 OR content_ja:QUERY1) " + + op + + " NOT (title:QUERY2 OR content:QUERY2 OR content_ja:QUERY2)", + queryHelper.buildQuery("QUERY1 NOT QUERY2").getQuery()); + assertEquals( + "(title:QUERY1 OR content:QUERY1 OR content_ja:QUERY1) " + + op + + " (title:QUERY2 OR content:QUERY2 OR content_ja:QUERY2)", + queryHelper.buildQuery("QUERY1 QUERY2").getQuery()); + assertEquals( + "(title:QUERY1 OR content:QUERY1 OR content_ja:QUERY1) " + + op + + " (title:QUERY2 OR content:QUERY2 OR content_ja:QUERY2)", + queryHelper.buildQuery("QUERY1 QUERY2 ").getQuery()); + assertEquals( + "(title:QUERY1 OR content:QUERY1 OR content_ja:QUERY1) " + + op + + " (title:QUERY2 OR content:QUERY2 OR content_ja:QUERY2)", + queryHelper.buildQuery(" QUERY1 QUERY2").getQuery()); + } } public void test_unbracketQuery() { @@ -1806,15 +2019,19 @@ public class QueryHelperTest extends S2TestCase { } public void test_inurl() { - assertEquals("url:*QUERY*", queryHelper.buildQuery("inurl:QUERY") - .getQuery()); - assertEquals("url:*QUERY1* url:*QUERY2*", - queryHelper.buildQuery("inurl:QUERY1 inurl:QUERY2").getQuery()); - assertEquals("(title:aaa OR content:aaa) url:*QUERY1* url:*QUERY2*", - queryHelper.buildQuery("aaa inurl:QUERY1 inurl:QUERY2") - .getQuery()); - assertEquals("url:*QUERY*", queryHelper.buildQuery("inurl:\"QUERY\"") - .getQuery()); + for (String op : new String[] { "AND", "OR" }) { + getRequest().setAttribute(Constants.DEFAULT_OPERATOR, op); + assertEquals("url:*QUERY*", queryHelper.buildQuery("inurl:QUERY") + .getQuery()); + assertEquals("url:*QUERY1* " + op + " url:*QUERY2*", queryHelper + .buildQuery("inurl:QUERY1 inurl:QUERY2").getQuery()); + assertEquals("(title:aaa OR content:aaa) " + op + " url:*QUERY1* " + + op + " url:*QUERY2*", + queryHelper.buildQuery("aaa inurl:QUERY1 inurl:QUERY2") + .getQuery()); + assertEquals("url:*QUERY*", + queryHelper.buildQuery("inurl:\"QUERY\"").getQuery()); + } } public void test_buildOptionQuery() {