QueryHelperTest.java 112 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699
  1. /*
  2. * Copyright 2012-2016 CodeLibs Project and the Others.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
  13. * either express or implied. See the License for the specific language
  14. * governing permissions and limitations under the License.
  15. */
  16. package org.codelibs.fess.helper;
  17. import org.apache.lucene.analysis.core.WhitespaceAnalyzer;
  18. import org.apache.lucene.queryparser.classic.ParseException;
  19. import org.apache.lucene.queryparser.ext.ExtendableQueryParser;
  20. import org.codelibs.fess.Constants;
  21. import org.codelibs.fess.mylasta.direction.FessConfig;
  22. import org.codelibs.fess.unit.UnitFessTestCase;
  23. import org.codelibs.fess.util.ComponentUtil;
  24. public class QueryHelperTest extends UnitFessTestCase {
  25. private QueryHelper queryHelper;
  26. @Override
  27. public void setUp() throws Exception {
  28. super.setUp();
  29. queryHelper = new QueryHelper();
  30. final FessConfig fessConfig = ComponentUtil.getFessConfig();
  31. registerMockInstance(fessConfig);
  32. registerMockInstance(new SystemHelper());
  33. inject(queryHelper);
  34. queryHelper.queryParser = new ExtendableQueryParser(Constants.DEFAULT_FIELD, new WhitespaceAnalyzer());
  35. queryHelper.init();
  36. }
  37. public void test_dummy() throws ParseException {
  38. System.out.println(queryHelper); // TODO
  39. }
  40. // public void test_build() {
  41. // for (final String op : new String[] { "AND", "OR" }) {
  42. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  43. // assertEquals("", queryHelper.buildQuery("").getQuery());
  44. //
  45. // assertEquals("title:QUERY OR content:QUERY", queryHelper.buildQuery("QUERY").getQuery());
  46. // assertEquals("title:QUERY OR content:QUERY", queryHelper.buildQuery("QUERY ").getQuery());
  47. // assertEquals("title:QUERY OR content:QUERY", queryHelper.buildQuery(" QUERY").getQuery());
  48. //
  49. // assertEquals("(title:QUERY1 OR content:QUERY1) " + op + " (title:QUERY2 OR content:QUERY2)",
  50. // queryHelper.buildQuery("QUERY1 QUERY2").getQuery());
  51. // assertEquals("(title:QUERY1 OR content:QUERY1) " + op + " (title:QUERY2 OR content:QUERY2)",
  52. // queryHelper.buildQuery("QUERY1 QUERY2 ").getQuery());
  53. // assertEquals("(title:QUERY1 OR content:QUERY1) " + op + " (title:QUERY2 OR content:QUERY2)",
  54. // queryHelper.buildQuery(" QUERY1 QUERY2").getQuery());
  55. //
  56. // assertEquals("title:QUERY1\\ QUERY2 OR content:QUERY1\\ QUERY2", queryHelper.buildQuery("\"QUERY1 QUERY2\"").getQuery());
  57. // assertEquals("title:QUERY1\\ QUERY2 OR content:QUERY1\\ QUERY2", queryHelper.buildQuery("\"QUERY1 QUERY2\" ").getQuery());
  58. // assertEquals("title:QUERY1\\ QUERY2 OR content:QUERY1\\ QUERY2", queryHelper.buildQuery(" \"QUERY1 QUERY2\"").getQuery());
  59. //
  60. // assertEquals("(title:QUERY1\\ QUERY2 OR content:QUERY1\\ QUERY2) " + op + " (title:QUERY3 OR content:QUERY3)",
  61. // queryHelper.buildQuery("\"QUERY1 QUERY2\" QUERY3").getQuery());
  62. // }
  63. // }
  64. //
  65. // public void test_build_fullwidthSpace() {
  66. // for (final String op : new String[] { "AND", "OR" }) {
  67. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  68. //
  69. // assertEquals("(title:QUERY1 OR content:QUERY1) " + op + " (title:QUERY2 OR content:QUERY2)",
  70. // queryHelper.buildQuery("QUERY1\u3000QUERY2").getQuery());
  71. // assertEquals("(title:QUERY1 OR content:QUERY1) " + op + " (title:QUERY2 OR content:QUERY2)",
  72. // queryHelper.buildQuery("QUERY1\u3000QUERY2\u3000").getQuery());
  73. // assertEquals("(title:QUERY1 OR content:QUERY1) " + op + " (title:QUERY2 OR content:QUERY2)",
  74. // queryHelper.buildQuery("\u3000QUERY1\u3000QUERY2").getQuery());
  75. //
  76. // assertEquals("title:QUERY1\\\u3000QUERY2 OR content:QUERY1\\\u3000QUERY2",
  77. // queryHelper.buildQuery("\"QUERY1\u3000QUERY2\"").getQuery());
  78. //
  79. // assertEquals("(title:QUERY1\\\u3000QUERY2 OR content:QUERY1\\\u3000QUERY2) " + op + " (title:QUERY3 OR content:QUERY3)",
  80. // queryHelper.buildQuery("\"QUERY1\u3000QUERY2\"\u3000QUERY3").getQuery());
  81. // }
  82. // }
  83. //
  84. // public void test_build_prefix() {
  85. // for (final String op : new String[] { "AND", "OR" }) {
  86. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  87. // assertEquals("mimetype:QUERY1", queryHelper.buildQuery("mimetype:QUERY1").getQuery());
  88. // assertEquals("mimetype:QUERY1 " + op + " (title:QUERY2 OR content:QUERY2)",
  89. // queryHelper.buildQuery("mimetype:QUERY1 QUERY2").getQuery());
  90. // assertEquals("mimetype:QUERY1 " + op + " (title:QUERY2 OR content:QUERY2) " + op + " (title:QUERY3 OR content:QUERY3)",
  91. // queryHelper.buildQuery("mimetype:QUERY1 QUERY2 QUERY3").getQuery());
  92. // assertEquals("mimetype:QUERY1 " + op + " host:QUERY2 " + op + " (title:QUERY3 OR content:QUERY3)",
  93. // queryHelper.buildQuery("mimetype:QUERY1 host:QUERY2 QUERY3").getQuery());
  94. // assertEquals("mimetype:QUERY1\\ QUERY2 " + op + " (title:QUERY3 OR content:QUERY3)",
  95. // queryHelper.buildQuery("mimetype:\"QUERY1 QUERY2\" QUERY3").getQuery());
  96. // }
  97. // }
  98. //
  99. // public void test_build_prefix_unknown() {
  100. // for (final String op : new String[] { "AND", "OR" }) {
  101. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  102. // assertEquals("title:site\\: OR content:site\\:", queryHelper.buildQuery("site:").getQuery());
  103. // assertEquals("title:hoge\\:QUERY1 OR content:hoge\\:QUERY1", queryHelper.buildQuery("hoge:QUERY1").getQuery());
  104. // assertEquals("(title:hoge\\:QUERY1 OR content:hoge\\:QUERY1) " + op + " (title:QUERY2 OR content:QUERY2)",
  105. // queryHelper.buildQuery("hoge:QUERY1 QUERY2").getQuery());
  106. // assertEquals("(title:hoge\\:QUERY1 OR content:hoge\\:QUERY1) " + op + " (title:QUERY2 OR content:QUERY2) " + op
  107. // + " (title:QUERY3 OR content:QUERY3)", queryHelper.buildQuery("hoge:QUERY1 QUERY2 QUERY3").getQuery());
  108. // assertEquals(
  109. // "(title:hoge\\:QUERY1 OR content:hoge\\:QUERY1) " + op + " host:QUERY2 " + op + " (title:QUERY3 OR content:QUERY3)",
  110. // queryHelper.buildQuery("hoge:QUERY1 host:QUERY2 QUERY3").getQuery());
  111. // assertEquals("(title:hoge\\:QUERY1\\ QUERY2 OR content:hoge\\:QUERY1\\ QUERY2) " + op + " (title:QUERY3 OR content:QUERY3)",
  112. // queryHelper.buildQuery("hoge:\"QUERY1 QUERY2\" QUERY3").getQuery());
  113. // }
  114. // }
  115. //
  116. // public void test_build_roleType() {
  117. // for (final String op : new String[] { "AND", "OR" }) {
  118. // queryHelper.roleQueryHelper = new RoleQueryHelper() {
  119. // @Override
  120. // public Set<String> build() {
  121. // final Set<String> list = new LinkedHashSet<>();
  122. // list.add("guest");
  123. // return list;
  124. // }
  125. // };
  126. //
  127. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  128. // assertEquals("", queryHelper.build("", true).getQuery());
  129. //
  130. // assertEquals("title:QUERY OR content:QUERY", queryHelper.build("QUERY", true).getQuery());
  131. // assertEquals("role:guest", queryHelper.build("QUERY", true).getFilterQueries()[0]);
  132. //
  133. // assertEquals("(title:QUERY1 OR content:QUERY1) " + op + " (title:QUERY2 OR content:QUERY2)",
  134. // queryHelper.build("QUERY1 QUERY2", true).getQuery());
  135. // assertEquals("role:guest", queryHelper.build("QUERY1 QUERY2", true).getFilterQueries()[0]);
  136. //
  137. // queryHelper.roleQueryHelper = new RoleQueryHelper() {
  138. // @Override
  139. // public Set<String> build() {
  140. // final Set<String> list = new LinkedHashSet<>();
  141. // list.add("guest");
  142. // list.add("admin");
  143. // return list;
  144. // }
  145. // };
  146. //
  147. // assertEquals("title:QUERY OR content:QUERY", queryHelper.build("QUERY", true).getQuery());
  148. // assertEquals("role:guest OR role:admin", queryHelper.build("QUERY", true).getFilterQueries()[0]);
  149. //
  150. // assertEquals("(title:QUERY1 OR content:QUERY1) " + op + " (title:QUERY2 OR content:QUERY2)",
  151. // queryHelper.build("QUERY1 QUERY2", true).getQuery());
  152. // assertEquals("role:guest OR role:admin", queryHelper.build("QUERY1 QUERY2", true).getFilterQueries()[0]);
  153. // }
  154. // }
  155. //
  156. // public void test_sortField() {
  157. // String query;
  158. // QueryContext queryContext;
  159. //
  160. // for (final String op : new String[] { "AND", "OR" }) {
  161. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  162. // query = "";
  163. // queryContext = queryHelper.buildQuery(query);
  164. // assertEquals("", queryContext.getQuery());
  165. // assertEquals(0, queryContext.getSortFields().length);
  166. //
  167. // query = "sort:content_length";
  168. // queryContext = queryHelper.buildQuery(query);
  169. // assertEquals("", queryContext.getQuery());
  170. // assertEquals(1, queryContext.getSortFields().length);
  171. // assertEquals("content_length", queryContext.getSortFields()[0].getField());
  172. // assertEquals(Constants.ASC, queryContext.getSortFields()[0].getOrder());
  173. //
  174. // query = "sort:content_length.desc";
  175. // queryContext = queryHelper.buildQuery(query);
  176. // assertEquals("", queryContext.getQuery());
  177. // assertEquals(1, queryContext.getSortFields().length);
  178. // assertEquals("content_length", queryContext.getSortFields()[0].getField());
  179. // assertEquals(Constants.DESC, queryContext.getSortFields()[0].getOrder());
  180. //
  181. // query = "sort:content_length.asc,last_modified";
  182. // queryContext = queryHelper.buildQuery(query);
  183. // assertEquals("", queryContext.getQuery());
  184. // assertEquals(2, queryContext.getSortFields().length);
  185. // assertEquals("content_length", queryContext.getSortFields()[0].getField());
  186. // assertEquals(Constants.ASC, queryContext.getSortFields()[0].getOrder());
  187. // assertEquals("last_modified", queryContext.getSortFields()[1].getField());
  188. // assertEquals(Constants.ASC, queryContext.getSortFields()[1].getOrder());
  189. //
  190. // query = "QUERY sort:content_length";
  191. // queryContext = queryHelper.buildQuery(query);
  192. // assertEquals("title:QUERY OR content:QUERY", queryContext.getQuery());
  193. // assertEquals(1, queryContext.getSortFields().length);
  194. // assertEquals("content_length", queryContext.getSortFields()[0].getField());
  195. // assertEquals(Constants.ASC, queryContext.getSortFields()[0].getOrder());
  196. //
  197. // query = "QUERY sort:content_length.desc";
  198. // queryContext = queryHelper.buildQuery(query);
  199. // assertEquals("title:QUERY OR content:QUERY", queryContext.getQuery());
  200. // assertEquals(1, queryContext.getSortFields().length);
  201. // assertEquals("content_length", queryContext.getSortFields()[0].getField());
  202. // assertEquals(Constants.DESC, queryContext.getSortFields()[0].getOrder());
  203. //
  204. // query = "QUERY sort:content_length.asc,last_modified";
  205. // queryContext = queryHelper.buildQuery(query);
  206. // assertEquals("title:QUERY OR content:QUERY", queryContext.getQuery());
  207. // assertEquals(2, queryContext.getSortFields().length);
  208. // assertEquals("content_length", queryContext.getSortFields()[0].getField());
  209. // assertEquals(Constants.ASC, queryContext.getSortFields()[0].getOrder());
  210. // assertEquals("last_modified", queryContext.getSortFields()[1].getField());
  211. // assertEquals(Constants.ASC, queryContext.getSortFields()[1].getOrder());
  212. //
  213. // query = "QUERY mimetype:QUERY1 sort:content_length";
  214. // queryContext = queryHelper.buildQuery(query);
  215. // assertEquals("(title:QUERY OR content:QUERY) " + op + " mimetype:QUERY1", queryContext.getQuery());
  216. // assertEquals(1, queryContext.getSortFields().length);
  217. // assertEquals("content_length", queryContext.getSortFields()[0].getField());
  218. // assertEquals(Constants.ASC, queryContext.getSortFields()[0].getOrder());
  219. //
  220. // query = "QUERY sort:content_length.desc mimetype:QUERY1";
  221. // queryContext = queryHelper.buildQuery(query);
  222. // assertEquals("(title:QUERY OR content:QUERY) " + op + " mimetype:QUERY1", queryContext.getQuery());
  223. // assertEquals(1, queryContext.getSortFields().length);
  224. // assertEquals("content_length", queryContext.getSortFields()[0].getField());
  225. // assertEquals(Constants.DESC, queryContext.getSortFields()[0].getOrder());
  226. //
  227. // query = "QUERY sort:content_length.asc,last_modified mimetype:QUERY1";
  228. // queryContext = queryHelper.buildQuery(query);
  229. // assertEquals("(title:QUERY OR content:QUERY) " + op + " mimetype:QUERY1", queryContext.getQuery());
  230. // assertEquals(2, queryContext.getSortFields().length);
  231. // assertEquals("content_length", queryContext.getSortFields()[0].getField());
  232. // assertEquals(Constants.ASC, queryContext.getSortFields()[0].getOrder());
  233. // assertEquals("last_modified", queryContext.getSortFields()[1].getField());
  234. // assertEquals(Constants.ASC, queryContext.getSortFields()[1].getOrder());
  235. // }
  236. // }
  237. //
  238. // public void test_sortField_invalid() {
  239. // String query;
  240. // QueryContext queryContext;
  241. //
  242. // query = "sort:hoge";
  243. // queryContext = queryHelper.buildQuery(query);
  244. // assertEquals("", queryContext.getQuery());
  245. // assertEquals(0, queryContext.getSortFields().length);
  246. //
  247. // query = "sort:content_length.hoge";
  248. // queryContext = queryHelper.buildQuery(query);
  249. // assertEquals("", queryContext.getQuery());
  250. // assertEquals(0, queryContext.getSortFields().length);
  251. //
  252. // query = "sort:content_length.asc,hoge";
  253. // queryContext = queryHelper.buildQuery(query);
  254. // assertEquals("", queryContext.getQuery());
  255. // assertEquals(1, queryContext.getSortFields().length);
  256. // assertEquals("content_length", queryContext.getSortFields()[0].getField());
  257. // assertEquals(Constants.ASC, queryContext.getSortFields()[0].getOrder());
  258. // }
  259. //
  260. // public void test_wildcardSearches() {
  261. // for (final String op : new String[] { "AND", "OR" }) {
  262. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  263. // // *
  264. //
  265. // assertEquals("title:\\* OR content:\\*", queryHelper.buildQuery("*").getQuery());
  266. // assertEquals("title:QUERY* OR content:QUERY*", queryHelper.buildQuery("QUERY* ").getQuery());
  267. // assertEquals("title:Q*ERY OR content:Q*ERY", queryHelper.buildQuery(" Q*ERY").getQuery());
  268. //
  269. // assertEquals("(title:Q*ERY1 OR content:Q*ERY1) " + op + " (title:Q*ERY2 OR content:Q*ERY2)",
  270. // queryHelper.buildQuery("Q*ERY1 Q*ERY2").getQuery());
  271. //
  272. // assertEquals("title:Q*ERY1\\ Q*ERY2 OR content:Q*ERY1\\ Q*ERY2", queryHelper.buildQuery("\"Q*ERY1 Q*ERY2\"").getQuery());
  273. //
  274. // assertEquals("(title:Q*ERY1\\ Q*ERY2 OR content:Q*ERY1\\ Q*ERY2) " + op + " (title:Q*ERY3 OR content:Q*ERY3)",
  275. // queryHelper.buildQuery("\"Q*ERY1 Q*ERY2\" Q*ERY3").getQuery());
  276. //
  277. // assertEquals("mimetype:QUERY1*", queryHelper.buildQuery("mimetype:QUERY1*").getQuery());
  278. // assertEquals("mimetype:QUERY1* " + op + " (title:QUERY2 OR content:QUERY2)",
  279. // queryHelper.buildQuery("mimetype:QUERY1* QUERY2").getQuery());
  280. //
  281. // // ?
  282. //
  283. // assertEquals("title:\\? OR content:\\?", queryHelper.buildQuery("?").getQuery());
  284. // assertEquals("title:QUERY? OR content:QUERY?", queryHelper.buildQuery("QUERY? ").getQuery());
  285. // assertEquals("title:Q?ERY OR content:Q?ERY", queryHelper.buildQuery(" Q?ERY").getQuery());
  286. //
  287. // assertEquals("(title:Q?ERY1 OR content:Q?ERY1) " + op + " (title:Q?ERY2 OR content:Q?ERY2)",
  288. // queryHelper.buildQuery("Q?ERY1 Q?ERY2").getQuery());
  289. //
  290. // assertEquals("title:Q?ERY1\\ Q?ERY2 OR content:Q?ERY1\\ Q?ERY2", queryHelper.buildQuery("\"Q?ERY1 Q?ERY2\"").getQuery());
  291. //
  292. // assertEquals("(title:Q?ERY1\\ Q?ERY2 OR content:Q?ERY1\\ Q?ERY2) " + op + " (title:Q?ERY3 OR content:Q?ERY3)",
  293. // queryHelper.buildQuery("\"Q?ERY1 Q?ERY2\" Q?ERY3").getQuery());
  294. //
  295. // assertEquals("mimetype:QUERY1?", queryHelper.buildQuery("mimetype:QUERY1?").getQuery());
  296. // assertEquals("mimetype:QUERY1? " + op + " (title:QUERY2 OR content:QUERY2)",
  297. // queryHelper.buildQuery("mimetype:QUERY1? QUERY2").getQuery());
  298. // }
  299. // }
  300. //
  301. // public void test_fuzzySearches() {
  302. // for (final String op : new String[] { "AND", "OR" }) {
  303. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  304. // // ~
  305. //
  306. // assertEquals("title:QUERY OR content:QUERY", queryHelper.buildQuery("QUERY~").getQuery());
  307. // assertEquals("(title:QUERY1 OR content:QUERY1) " + op + " (title:QUERY2 OR content:QUERY2)",
  308. // queryHelper.buildQuery("QUERY1~ QUERY2").getQuery());
  309. // assertEquals("(title:QUERY1 OR content:QUERY1) " + op + " (title:QUERY2 OR content:QUERY2)",
  310. // queryHelper.buildQuery("QUERY1~ QUERY2~").getQuery());
  311. //
  312. // assertEquals("mimetype:QUERY1~", queryHelper.buildQuery("mimetype:QUERY1~").getQuery());
  313. // assertEquals("mimetype:QUERY1~ " + op + " (title:QUERY2 OR content:QUERY2)",
  314. // queryHelper.buildQuery("mimetype:QUERY1~ QUERY2").getQuery());
  315. //
  316. // assertEquals("title:QUERY1\\ QUERY2 OR content:QUERY1\\ QUERY2", queryHelper.buildQuery("\"QUERY1 QUERY2\"~").getQuery());
  317. // assertEquals("title:QUERY1 OR content:QUERY1", queryHelper.buildQuery("\"QUERY1~\"").getQuery());
  318. //
  319. // // ~0.8
  320. //
  321. // assertEquals("title:QUERY OR content:QUERY", queryHelper.buildQuery("QUERY~0.8").getQuery());
  322. // assertEquals("(title:QUERY1 OR content:QUERY1) " + op + " (title:QUERY2 OR content:QUERY2)",
  323. // queryHelper.buildQuery("QUERY1~0.8 QUERY2").getQuery());
  324. // assertEquals("(title:QUERY1 OR content:QUERY1) " + op + " (title:QUERY2 OR content:QUERY2)",
  325. // queryHelper.buildQuery("QUERY1~0.5 QUERY2~0.8").getQuery());
  326. //
  327. // assertEquals("mimetype:QUERY1~0.8", queryHelper.buildQuery("mimetype:QUERY1~0.8").getQuery());
  328. // assertEquals("mimetype:QUERY1~0.8 " + op + " (title:QUERY2 OR content:QUERY2)",
  329. // queryHelper.buildQuery("mimetype:QUERY1~0.8 QUERY2").getQuery());
  330. //
  331. // assertEquals("title:QUERY1\\ QUERY2 OR content:QUERY1\\ QUERY2", queryHelper.buildQuery("\"QUERY1 QUERY2\"~0.8").getQuery());
  332. // assertEquals("title:QUERY1 OR content:QUERY1", queryHelper.buildQuery("\"QUERY1~0.8\"").getQuery());
  333. //
  334. // assertEquals("title:QUERY1 OR content:QUERY1", queryHelper.buildQuery("\"QUERY1~0.8a\"").getQuery());
  335. // assertEquals("title:QUERY1 OR content:QUERY1", queryHelper.buildQuery("\"QUERY1~a\"").getQuery());
  336. // }
  337. //
  338. // getMockRequest().setLocale(Locale.JAPANESE);
  339. // for (final String op : new String[] { "AND", "OR" }) {
  340. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  341. // // ~
  342. //
  343. // assertEquals("title:QUERY OR content:QUERY OR content_ja:QUERY~", queryHelper.buildQuery("QUERY~").getQuery());
  344. // assertEquals(
  345. // "(title:QUERY1 OR content:QUERY1 OR content_ja:QUERY1~) " + op
  346. // + " (title:QUERY2 OR content:QUERY2 OR content_ja:QUERY2)",
  347. // queryHelper.buildQuery("QUERY1~ QUERY2").getQuery());
  348. // assertEquals(
  349. // "(title:QUERY1 OR content:QUERY1 OR content_ja:QUERY1~) " + op
  350. // + " (title:QUERY2 OR content:QUERY2 OR content_ja:QUERY2~)",
  351. // queryHelper.buildQuery("QUERY1~ QUERY2~").getQuery());
  352. //
  353. // assertEquals("mimetype:QUERY1~", queryHelper.buildQuery("mimetype:QUERY1~").getQuery());
  354. // assertEquals("mimetype:QUERY1~ " + op + " (title:QUERY2 OR content:QUERY2 OR content_ja:QUERY2)",
  355. // queryHelper.buildQuery("mimetype:QUERY1~ QUERY2").getQuery());
  356. //
  357. // assertEquals("title:QUERY1\\ QUERY2 OR content:QUERY1\\ QUERY2 OR content_ja:QUERY1\\ QUERY2~",
  358. // queryHelper.buildQuery("\"QUERY1 QUERY2\"~").getQuery());
  359. // assertEquals("title:QUERY1 OR content:QUERY1 OR content_ja:QUERY1~", queryHelper.buildQuery("\"QUERY1~\"").getQuery());
  360. //
  361. // // ~0.8
  362. //
  363. // assertEquals("title:QUERY OR content:QUERY OR content_ja:QUERY~0.8", queryHelper.buildQuery("QUERY~0.8").getQuery());
  364. // assertEquals(
  365. // "(title:QUERY1 OR content:QUERY1 OR content_ja:QUERY1~0.8) " + op
  366. // + " (title:QUERY2 OR content:QUERY2 OR content_ja:QUERY2)",
  367. // queryHelper.buildQuery("QUERY1~0.8 QUERY2").getQuery());
  368. // assertEquals(
  369. // "(title:QUERY1 OR content:QUERY1 OR content_ja:QUERY1~0.5) " + op
  370. // + " (title:QUERY2 OR content:QUERY2 OR content_ja:QUERY2~0.8)",
  371. // queryHelper.buildQuery("QUERY1~0.5 QUERY2~0.8").getQuery());
  372. //
  373. // assertEquals("mimetype:QUERY1~0.8", queryHelper.buildQuery("mimetype:QUERY1~0.8").getQuery());
  374. // assertEquals("mimetype:QUERY1~0.8 " + op + " (title:QUERY2 OR content:QUERY2 OR content_ja:QUERY2)",
  375. // queryHelper.buildQuery("mimetype:QUERY1~0.8 QUERY2").getQuery());
  376. //
  377. // assertEquals("title:QUERY1\\ QUERY2 OR content:QUERY1\\ QUERY2 OR content_ja:QUERY1\\ QUERY2~0.8",
  378. // queryHelper.buildQuery("\"QUERY1 QUERY2\"~0.8").getQuery());
  379. // assertEquals("title:QUERY1 OR content:QUERY1 OR content_ja:QUERY1~0.8", queryHelper.buildQuery("\"QUERY1~0.8\"").getQuery());
  380. //
  381. // assertEquals("title:QUERY1 OR content:QUERY1 OR content_ja:QUERY1~0.8", queryHelper.buildQuery("\"QUERY1~0.8a\"").getQuery());
  382. // assertEquals("title:QUERY1 OR content:QUERY1 OR content_ja:QUERY1~", queryHelper.buildQuery("\"QUERY1~a\"").getQuery());
  383. // }
  384. // }
  385. //
  386. // public void test_proximitySearches() {
  387. // for (final String op : new String[] { "AND", "OR" }) {
  388. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  389. // // ~10
  390. // assertEquals("title:\"QUERY\"~10 OR content:\"QUERY\"~10", queryHelper.buildQuery("QUERY~10").getQuery());
  391. // assertEquals("title:\"QUERY\"~1 OR content:\"QUERY\"~1", queryHelper.buildQuery("QUERY~1").getQuery());
  392. // assertEquals("title:\"QUERY\"~5 OR content:\"QUERY\"~5", queryHelper.buildQuery("QUERY~5.5").getQuery());
  393. // assertEquals("(title:\"QUERY1\"~10 OR content:\"QUERY1\"~10) " + op + " (title:QUERY2 OR content:QUERY2)",
  394. // queryHelper.buildQuery("QUERY1~10 QUERY2").getQuery());
  395. // assertEquals("(title:\"QUERY1\"~5 OR content:\"QUERY1\"~5) " + op + " (title:\"QUERY2\"~10 OR content:\"QUERY2\"~10)",
  396. // queryHelper.buildQuery("QUERY1~5 QUERY2~10").getQuery());
  397. //
  398. // assertEquals("mimetype:\"QUERY1\"~10", queryHelper.buildQuery("mimetype:QUERY1~10").getQuery());
  399. // assertEquals("mimetype:\"QUERY1\"~10 " + op + " (title:QUERY2 OR content:QUERY2)",
  400. // queryHelper.buildQuery("mimetype:QUERY1~10 QUERY2").getQuery());
  401. //
  402. // assertEquals("title:\"QUERY1\\ QUERY2\"~10 OR content:\"QUERY1\\ QUERY2\"~10",
  403. // queryHelper.buildQuery("\"QUERY1 QUERY2\"~10").getQuery());
  404. // assertEquals("title:\"QUERY1\"~10 OR content:\"QUERY1\"~10", queryHelper.buildQuery("\"QUERY1~10\"").getQuery());
  405. //
  406. // assertEquals("title:\"QUERY1\"~10 OR content:\"QUERY1\"~10", queryHelper.buildQuery("\"QUERY1~10a\"").getQuery());
  407. // }
  408. // }
  409. //
  410. // public void test_rangeSearches() {
  411. // String rangeQuery;
  412. // for (final String op : new String[] { "AND", "OR" }) {
  413. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  414. // // mod_date:[20020101 TO 20030101]
  415. // assertEquals("title:[20020101 TO 20030101] OR content:[20020101 TO 20030101]",
  416. // queryHelper.buildQuery("[20020101 TO 20030101]").getQuery());
  417. // assertEquals("last_modified:[20020101 TO 20030101]", queryHelper.buildQuery("last_modified:[20020101 TO 20030101]").getQuery());
  418. // assertEquals("(title:QUERY OR content:QUERY) " + op + " last_modified:[20020101 TO 20030101]",
  419. // queryHelper.buildQuery("QUERY last_modified:[20020101 TO 20030101]").getQuery());
  420. // assertEquals("title:{Aida TO Carmen} OR content:{Aida TO Carmen}", queryHelper.buildQuery("{Aida TO Carmen}").getQuery());
  421. // assertEquals("last_modified:{Aida TO Carmen}", queryHelper.buildQuery("last_modified:{Aida TO Carmen}").getQuery());
  422. // assertEquals("(title:QUERY OR content:QUERY) " + op + " title:{Aida TO Carmen}",
  423. // queryHelper.buildQuery("QUERY title:{Aida TO Carmen}").getQuery());
  424. // assertEquals("last_modified:[20020101 TO abc]", queryHelper.buildQuery("last_modified:[20020101 TO abc]").getQuery());
  425. // assertEquals("last_modified:[abc TO 20020101]", queryHelper.buildQuery("last_modified:[abc TO 20020101]").getQuery());
  426. // assertEquals("last_modified:[20020101 TO *]", queryHelper.buildQuery("last_modified:[20020101 TO *]").getQuery());
  427. // assertEquals("last_modified:[* TO 20020101]", queryHelper.buildQuery("last_modified:[* TO 20020101]").getQuery());
  428. //
  429. // rangeQuery = "(content:[1 TO 2] OR content:[3 TO 4]) " + op + " (content:[5 TO 6] OR content:[7 TO 8])";
  430. // assertEquals(rangeQuery, queryHelper.buildQuery(rangeQuery).getQuery());
  431. //
  432. // try {
  433. // queryHelper.buildQuery("last_modified:[20020101 TO]").getQuery();
  434. // fail();
  435. // } catch (final InvalidQueryException e) {}
  436. // try {
  437. // queryHelper.buildQuery("last_modified:[TO 20030101]").getQuery();
  438. // fail();
  439. // } catch (final InvalidQueryException e) {}
  440. // try {
  441. // queryHelper.buildQuery("last_modified:[20020101]").getQuery();
  442. // fail();
  443. // } catch (final InvalidQueryException e) {}
  444. // try {
  445. // queryHelper.buildQuery("last_modified:[20030101]").getQuery();
  446. // fail();
  447. // } catch (final InvalidQueryException e) {}
  448. //
  449. // // mod_date:{20020101 TO 20030101}
  450. // assertEquals("title:{20020101 TO 20030101} OR content:{20020101 TO 20030101}",
  451. // queryHelper.buildQuery("{20020101 TO 20030101}").getQuery());
  452. // assertEquals("last_modified:{20020101 TO 20030101}", queryHelper.buildQuery("last_modified:{20020101 TO 20030101}").getQuery());
  453. // assertEquals("(title:QUERY OR content:QUERY) " + op + " last_modified:{20020101 TO 20030101}",
  454. // queryHelper.buildQuery("QUERY last_modified:{20020101 TO 20030101}").getQuery());
  455. // assertEquals("title:{Aida TO Carmen} OR content:{Aida TO Carmen}", queryHelper.buildQuery("{Aida TO Carmen}").getQuery());
  456. // assertEquals("last_modified:{Aida TO Carmen}", queryHelper.buildQuery("last_modified:{Aida TO Carmen}").getQuery());
  457. // assertEquals("(title:QUERY OR content:QUERY) " + op + " title:{Aida TO Carmen}",
  458. // queryHelper.buildQuery("QUERY title:{Aida TO Carmen}").getQuery());
  459. // assertEquals("last_modified:{20020101 TO abc}", queryHelper.buildQuery("last_modified:{20020101 TO abc}").getQuery());
  460. // assertEquals("last_modified:{abc TO 20020101}", queryHelper.buildQuery("last_modified:{abc TO 20020101}").getQuery());
  461. // assertEquals("last_modified:{20020101 TO *}", queryHelper.buildQuery("last_modified:{20020101 TO *}").getQuery());
  462. // assertEquals("last_modified:{* TO 20020101}", queryHelper.buildQuery("last_modified:{* TO 20020101}").getQuery());
  463. //
  464. // rangeQuery = "(content:{1 TO 2} OR content:{3 TO 4}) " + op + " (content:{5 TO 6} OR content:{7 TO 8})";
  465. // assertEquals(rangeQuery, queryHelper.buildQuery(rangeQuery).getQuery());
  466. //
  467. // try {
  468. // queryHelper.buildQuery("last_modified:{20020101 TO}").getQuery();
  469. // fail();
  470. // } catch (final InvalidQueryException e) {}
  471. // try {
  472. // queryHelper.buildQuery("last_modified:{TO 20030101}").getQuery();
  473. // fail();
  474. // } catch (final InvalidQueryException e) {}
  475. // try {
  476. // queryHelper.buildQuery("last_modified:{20020101}").getQuery();
  477. // fail();
  478. // } catch (final InvalidQueryException e) {}
  479. // try {
  480. // queryHelper.buildQuery("last_modified:{20030101}").getQuery();
  481. // fail();
  482. // } catch (final InvalidQueryException e) {}
  483. //
  484. // rangeQuery = "(content:[1 TO 2] OR content:{3 TO 4}) " + op + " (content:{5 TO 6} OR content:[7 TO 8])";
  485. // assertEquals(rangeQuery, queryHelper.buildQuery(rangeQuery).getQuery());
  486. // }
  487. // }
  488. //
  489. // public void test_boosting() {
  490. // for (final String op : new String[] { "AND", "OR" }) {
  491. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  492. // // ^1000 ""^1000
  493. // assertEquals("title:QUERY^1000 OR content:QUERY^1000", queryHelper.buildQuery("QUERY^1000").getQuery());
  494. // assertEquals("(title:QUERY1^1000 OR content:QUERY1^1000) " + op + " (title:QUERY2 OR content:QUERY2)",
  495. // queryHelper.buildQuery("QUERY1^1000 QUERY2").getQuery());
  496. // assertEquals("(title:QUERY1^500 OR content:QUERY1^500) " + op + " (title:QUERY2^1000 OR content:QUERY2^1000)",
  497. // queryHelper.buildQuery("QUERY1^500 QUERY2^1000").getQuery());
  498. //
  499. // assertEquals("mimetype:QUERY1^1000", queryHelper.buildQuery("mimetype:QUERY1^1000").getQuery());
  500. // assertEquals("mimetype:QUERY1^1000 " + op + " (title:QUERY2 OR content:QUERY2)",
  501. // queryHelper.buildQuery("mimetype:QUERY1^1000 QUERY2").getQuery());
  502. //
  503. // assertEquals("title:QUERY1\\ QUERY2^1000 OR content:QUERY1\\ QUERY2^1000",
  504. // queryHelper.buildQuery("\"QUERY1 QUERY2\"^1000").getQuery());
  505. // assertEquals("title:QUERY1^1000 OR content:QUERY1^1000", queryHelper.buildQuery("\"QUERY1^1000\"").getQuery());
  506. // }
  507. // }
  508. //
  509. // public void test_reserved() {
  510. // for (int i = 0; i < Constants.RESERVED.length - 1; i++) {
  511. // try {
  512. // assertEquals("title:\\" + Constants.RESERVED[i] + " OR content:\\" + Constants.RESERVED[i],
  513. // queryHelper.buildQuery(Constants.RESERVED[i]).getQuery());
  514. // } catch (final InvalidQueryException e) {
  515. // if (Constants.RESERVED[i].equals("\"") && e.getMessageCode().equals("errors.invalid_query_quoted")) {
  516. // assertEquals("title:\\" + Constants.RESERVED[i] + " OR content:\\" + Constants.RESERVED[i],
  517. // queryHelper.buildQuery("\\" + Constants.RESERVED[i]).getQuery());
  518. // continue;
  519. // } else if (Constants.RESERVED[i].equals("{") && e.getMessageCode().equals("errors.invalid_query_curly_bracket")) {
  520. // assertEquals("title:\\" + Constants.RESERVED[i] + " OR content:\\" + Constants.RESERVED[i],
  521. // queryHelper.buildQuery("\\" + Constants.RESERVED[i]).getQuery());
  522. // continue;
  523. // } else if (Constants.RESERVED[i].equals("[") && e.getMessageCode().equals("errors.invalid_query_square_bracket")) {
  524. // assertEquals("title:\\" + Constants.RESERVED[i] + " OR content:\\" + Constants.RESERVED[i],
  525. // queryHelper.buildQuery("\\" + Constants.RESERVED[i]).getQuery());
  526. // continue;
  527. // } else if (Constants.RESERVED[i].equals("(") && e.getMessageCode().equals("errors.invalid_query_parenthesis")) {
  528. // assertEquals("title:\\" + Constants.RESERVED[i] + " OR content:\\" + Constants.RESERVED[i],
  529. // queryHelper.buildQuery("\\" + Constants.RESERVED[i]).getQuery());
  530. // continue;
  531. // }
  532. // }
  533. // }
  534. // assertEquals("title:\\: OR content:\\:", queryHelper.buildQuery(":").getQuery());
  535. // }
  536. //
  537. // public void test_or() {
  538. // for (final String op : new String[] { "AND", "OR" }) {
  539. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  540. // assertEquals("title:QUERY OR content:QUERY", queryHelper.buildQuery("OR QUERY").getQuery());
  541. // assertEquals("(title:QUERY1 OR content:QUERY1) OR (title:QUERY2 OR content:QUERY2)",
  542. // queryHelper.buildQuery("QUERY1 OR QUERY2").getQuery());
  543. // assertEquals("title:QUERY", queryHelper.buildQuery("OR title:QUERY").getQuery());
  544. // assertEquals("title:QUERY1 OR title:QUERY2", queryHelper.buildQuery("title:QUERY1 OR title:QUERY2").getQuery());
  545. // assertEquals("(title:QUERY1 OR content:QUERY1) OR title:QUERY2", queryHelper.buildQuery("QUERY1 OR title:QUERY2").getQuery());
  546. // assertEquals("mimetype:QUERY1 OR title:QUERY2", queryHelper.buildQuery("mimetype:QUERY1 OR title:QUERY2").getQuery());
  547. // assertEquals("(title:QUERY1 OR content:QUERY1) OR (title:QUERY2 OR content:QUERY2) " + op + " (title:QUERY3 OR content:QUERY3)",
  548. // queryHelper.buildQuery("QUERY1 OR QUERY2 QUERY3").getQuery());
  549. // assertEquals("(title:QUERY1 OR content:QUERY1) OR (title:QUERY2 OR content:QUERY2) OR (title:QUERY3 OR content:QUERY3)",
  550. // queryHelper.buildQuery("QUERY1 OR QUERY2 OR QUERY3").getQuery());
  551. // }
  552. // }
  553. //
  554. // public void test_and() {
  555. // for (final String op : new String[] { "AND", "OR" }) {
  556. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  557. // assertEquals("title:QUERY OR content:QUERY", queryHelper.buildQuery("AND QUERY").getQuery());
  558. // assertEquals("(title:QUERY1 OR content:QUERY1) AND (title:QUERY2 OR content:QUERY2)",
  559. // queryHelper.buildQuery("QUERY1 AND QUERY2").getQuery());
  560. // assertEquals("title:QUERY", queryHelper.buildQuery("AND title:QUERY").getQuery());
  561. // assertEquals("title:QUERY1 AND title:QUERY2", queryHelper.buildQuery("title:QUERY1 AND title:QUERY2").getQuery());
  562. // assertEquals("(title:QUERY1 OR content:QUERY1) AND title:QUERY2", queryHelper.buildQuery("QUERY1 AND title:QUERY2").getQuery());
  563. // assertEquals("mimetype:QUERY1 AND title:QUERY2", queryHelper.buildQuery("mimetype:QUERY1 AND title:QUERY2").getQuery());
  564. // assertEquals(
  565. // "(title:QUERY1 OR content:QUERY1) AND (title:QUERY2 OR content:QUERY2) " + op + " (title:QUERY3 OR content:QUERY3)",
  566. // queryHelper.buildQuery("QUERY1 AND QUERY2 QUERY3").getQuery());
  567. // assertEquals(
  568. // "(title:QUERY1 OR content:QUERY1) " + op + " (title:QUERY2 OR content:QUERY2) AND (title:QUERY3 OR content:QUERY3)",
  569. // queryHelper.buildQuery("QUERY1 QUERY2 AND QUERY3").getQuery());
  570. // assertEquals("(title:QUERY1 OR content:QUERY1) AND (title:QUERY2 OR content:QUERY2) AND (title:QUERY3 OR content:QUERY3)",
  571. // queryHelper.buildQuery("QUERY1 AND QUERY2 AND QUERY3").getQuery());
  572. // }
  573. // }
  574. //
  575. // public void test_not() {
  576. // for (final String op : new String[] { "AND", "OR" }) {
  577. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  578. // assertEquals("NOT (title:QUERY OR content:QUERY)", queryHelper.buildQuery("NOT QUERY").getQuery());
  579. // assertEquals("NOT title:QUERY", queryHelper.buildQuery("NOT title:QUERY").getQuery());
  580. // assertEquals("(title:QUERY2 OR content:QUERY2) " + op + " NOT (title:QUERY1 OR content:QUERY1)",
  581. // queryHelper.buildQuery("NOT QUERY1 QUERY2").getQuery());
  582. // assertEquals("(title:QUERY2 OR content:QUERY2) " + op + " NOT (title:QUERY1 OR content:QUERY1)",
  583. // queryHelper.buildQuery("NOT QUERY1 OR QUERY2").getQuery());
  584. // assertEquals("NOT (title:QUERY1 OR content:QUERY1) " + op + " NOT (title:QUERY2 OR content:QUERY2)",
  585. // queryHelper.buildQuery("NOT QUERY1 NOT QUERY2").getQuery());
  586. // assertEquals("NOT (title:QUERY1 OR content:QUERY1) " + op + " NOT (title:QUERY2 OR content:QUERY2)",
  587. // queryHelper.buildQuery("NOT QUERY1 OR NOT QUERY2").getQuery());
  588. // assertEquals("(title:QUERY2 OR content:QUERY2) " + op + " NOT (title:QUERY1 OR content:QUERY1) " + op
  589. // + " NOT (title:QUERY3 OR content:QUERY3)", queryHelper.buildQuery("NOT QUERY1 QUERY2 NOT QUERY3").getQuery());
  590. // assertEquals("NOT mimetype:QUERY", queryHelper.buildQuery("NOT mimetype:QUERY").getQuery());
  591. // assertEquals("NOT mimetype:QUERY1 " + op + " NOT title:QUERY2",
  592. // queryHelper.buildQuery("NOT mimetype:QUERY1 NOT title:QUERY2").getQuery());
  593. // assertEquals("(title:QUERY2 OR content:QUERY2) " + op + " NOT mimetype:QUERY1",
  594. // queryHelper.buildQuery("NOT mimetype:QUERY1 QUERY2").getQuery());
  595. // assertEquals("mimetype:QUERY2 " + op + " NOT (title:QUERY1 OR content:QUERY1)",
  596. // queryHelper.buildQuery("NOT QUERY1 mimetype:QUERY2").getQuery());
  597. // }
  598. // }
  599. //
  600. // public void test_escapeValue() {
  601. // final String[] targets =
  602. // new String[] { "+", "-", "&&", "||", "!", "(", ")", "{", "}", "[", "]", "^", "\"", "~", ":", "\\", " ", "\u3000" };
  603. // for (final String target : targets) {
  604. // assertEquals("abc\\" + target + "123", QueryUtil.escapeValue("abc" + target + "123"));
  605. // }
  606. // for (final String target : targets) {
  607. // assertEquals("abc\\" + target, QueryUtil.escapeValue("abc" + target));
  608. // }
  609. // for (final String target : targets) {
  610. // assertEquals("\\" + target + "123", QueryUtil.escapeValue(target + "123"));
  611. // }
  612. // for (final String target : targets) {
  613. // assertEquals("abc\\" + target + "123\\" + target + "ABC", QueryUtil.escapeValue("abc" + target + "123" + target + "ABC"));
  614. // }
  615. // }
  616. //
  617. // public void test_escapeRangeValue() {
  618. // final String[] targets = new String[] { "&&", "||", "!", "(", ")", "{", "}", "[", "]", "\"", "~", ":", "\\", " ", "\u3000" };
  619. // for (final String target : targets) {
  620. // assertEquals("abc\\" + target + "123", QueryUtil.escapeValue("abc" + target + "123"));
  621. // }
  622. // for (final String target : targets) {
  623. // assertEquals("abc\\" + target, QueryUtil.escapeValue("abc" + target));
  624. // }
  625. // for (final String target : targets) {
  626. // assertEquals("\\" + target + "123", QueryUtil.escapeValue(target + "123"));
  627. // }
  628. // for (final String target : targets) {
  629. // assertEquals("abc\\" + target + "123\\" + target + "ABC", QueryUtil.escapeValue("abc" + target + "123" + target + "ABC"));
  630. // }
  631. // }
  632. //
  633. // public void test_buildFacet() {
  634. // for (final String op : new String[] { "AND", "OR" }) {
  635. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  636. // assertEquals("", queryHelper.buildFacetQuery(""));
  637. //
  638. // assertEquals("title:QUERY OR content:QUERY", queryHelper.buildFacetQuery("QUERY"));
  639. // assertEquals("title:QUERY OR content:QUERY", queryHelper.buildFacetQuery("QUERY "));
  640. // assertEquals("title:QUERY OR content:QUERY", queryHelper.buildFacetQuery(" QUERY"));
  641. //
  642. // assertEquals("(title:QUERY1 OR content:QUERY1) " + op + " (title:QUERY2 OR content:QUERY2)",
  643. // queryHelper.buildFacetQuery("QUERY1 QUERY2"));
  644. // assertEquals("(title:QUERY1 OR content:QUERY1) " + op + " (title:QUERY2 OR content:QUERY2)",
  645. // queryHelper.buildFacetQuery("QUERY1 QUERY2 "));
  646. // assertEquals("(title:QUERY1 OR content:QUERY1) " + op + " (title:QUERY2 OR content:QUERY2)",
  647. // queryHelper.buildFacetQuery(" QUERY1 QUERY2"));
  648. //
  649. // assertEquals("title:QUERY1\\ QUERY2 OR content:QUERY1\\ QUERY2", queryHelper.buildFacetQuery("\"QUERY1 QUERY2\""));
  650. // assertEquals("title:QUERY1\\ QUERY2 OR content:QUERY1\\ QUERY2", queryHelper.buildFacetQuery("\"QUERY1 QUERY2\" "));
  651. // assertEquals("title:QUERY1\\ QUERY2 OR content:QUERY1\\ QUERY2", queryHelper.buildFacetQuery(" \"QUERY1 QUERY2\""));
  652. //
  653. // assertEquals("(title:QUERY1\\ QUERY2 OR content:QUERY1\\ QUERY2) " + op + " (title:QUERY3 OR content:QUERY3)",
  654. // queryHelper.buildFacetQuery("\"QUERY1 QUERY2\" QUERY3"));
  655. // }
  656. // }
  657. //
  658. // public void test_buildFacet_fullwidthSpace() {
  659. // for (final String op : new String[] { "AND", "OR" }) {
  660. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  661. //
  662. // assertEquals("(title:QUERY1 OR content:QUERY1) " + op + " (title:QUERY2 OR content:QUERY2)",
  663. // queryHelper.buildFacetQuery("QUERY1\u3000QUERY2"));
  664. // assertEquals("(title:QUERY1 OR content:QUERY1) " + op + " (title:QUERY2 OR content:QUERY2)",
  665. // queryHelper.buildFacetQuery("QUERY1\u3000QUERY2\u3000"));
  666. // assertEquals("(title:QUERY1 OR content:QUERY1) " + op + " (title:QUERY2 OR content:QUERY2)",
  667. // queryHelper.buildFacetQuery("\u3000QUERY1\u3000QUERY2"));
  668. //
  669. // assertEquals("title:QUERY1\\\u3000QUERY2 OR content:QUERY1\\\u3000QUERY2",
  670. // queryHelper.buildFacetQuery("\"QUERY1\u3000QUERY2\""));
  671. //
  672. // assertEquals("(title:QUERY1\\\u3000QUERY2 OR content:QUERY1\\\u3000QUERY2) " + op + " (title:QUERY3 OR content:QUERY3)",
  673. // queryHelper.buildFacetQuery("\"QUERY1\u3000QUERY2\"\u3000QUERY3"));
  674. // }
  675. // }
  676. //
  677. // public void test_buildFacet_prefix() {
  678. // for (final String op : new String[] { "AND", "OR" }) {
  679. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  680. // assertEquals("mimetype:QUERY1", queryHelper.buildFacetQuery("mimetype:QUERY1"));
  681. // assertEquals("mimetype:QUERY1 " + op + " (title:QUERY2 OR content:QUERY2)",
  682. // queryHelper.buildFacetQuery("mimetype:QUERY1 QUERY2"));
  683. // assertEquals("mimetype:QUERY1 " + op + " (title:QUERY2 OR content:QUERY2) " + op + " (title:QUERY3 OR content:QUERY3)",
  684. // queryHelper.buildFacetQuery("mimetype:QUERY1 QUERY2 QUERY3"));
  685. // assertEquals("mimetype:QUERY1 " + op + " host:QUERY2 " + op + " (title:QUERY3 OR content:QUERY3)",
  686. // queryHelper.buildFacetQuery("mimetype:QUERY1 host:QUERY2 QUERY3"));
  687. // assertEquals("mimetype:QUERY1\\ QUERY2 " + op + " (title:QUERY3 OR content:QUERY3)",
  688. // queryHelper.buildFacetQuery("mimetype:\"QUERY1 QUERY2\" QUERY3"));
  689. // }
  690. // }
  691. //
  692. // public void test_buildFacet_prefix_unknown() {
  693. // for (final String op : new String[] { "AND", "OR" }) {
  694. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  695. // assertEquals("title:site\\: OR content:site\\:", queryHelper.buildFacetQuery("site:"));
  696. // assertEquals("title:hoge\\:QUERY1 OR content:hoge\\:QUERY1", queryHelper.buildFacetQuery("hoge:QUERY1"));
  697. // assertEquals("(title:hoge\\:QUERY1 OR content:hoge\\:QUERY1) " + op + " (title:QUERY2 OR content:QUERY2)",
  698. // queryHelper.buildFacetQuery("hoge:QUERY1 QUERY2"));
  699. // assertEquals("(title:hoge\\:QUERY1 OR content:hoge\\:QUERY1) " + op + " (title:QUERY2 OR content:QUERY2) " + op
  700. // + " (title:QUERY3 OR content:QUERY3)", queryHelper.buildFacetQuery("hoge:QUERY1 QUERY2 QUERY3"));
  701. // assertEquals(
  702. // "(title:hoge\\:QUERY1 OR content:hoge\\:QUERY1) " + op + " host:QUERY2 " + op + " (title:QUERY3 OR content:QUERY3)",
  703. // queryHelper.buildFacetQuery("hoge:QUERY1 host:QUERY2 QUERY3"));
  704. // assertEquals("(title:hoge\\:QUERY1\\ QUERY2 OR content:hoge\\:QUERY1\\ QUERY2) " + op + " (title:QUERY3 OR content:QUERY3)",
  705. // queryHelper.buildFacetQuery("hoge:\"QUERY1 QUERY2\" QUERY3"));
  706. // }
  707. // }
  708. //
  709. // public void test_buildFacet_sortField() {
  710. // for (final String op : new String[] { "AND", "OR" }) {
  711. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  712. // String query;
  713. // String searchQuery;
  714. //
  715. // query = "";
  716. // searchQuery = queryHelper.buildFacetQuery(query);
  717. // assertEquals("", searchQuery);
  718. //
  719. // query = "sort:content_length";
  720. // searchQuery = queryHelper.buildFacetQuery(query);
  721. // assertEquals("", searchQuery);
  722. //
  723. // query = "sort:content_length.desc";
  724. // searchQuery = queryHelper.buildFacetQuery(query);
  725. // assertEquals("", searchQuery);
  726. //
  727. // query = "sort:content_length.asc,last_modified";
  728. // searchQuery = queryHelper.buildFacetQuery(query);
  729. // assertEquals("", searchQuery);
  730. //
  731. // query = "QUERY sort:content_length";
  732. // searchQuery = queryHelper.buildFacetQuery(query);
  733. // assertEquals("title:QUERY OR content:QUERY", searchQuery);
  734. //
  735. // query = "QUERY sort:content_length.desc";
  736. // searchQuery = queryHelper.buildFacetQuery(query);
  737. // assertEquals("title:QUERY OR content:QUERY", searchQuery);
  738. //
  739. // query = "QUERY sort:content_length.asc,last_modified";
  740. // searchQuery = queryHelper.buildFacetQuery(query);
  741. // assertEquals("title:QUERY OR content:QUERY", searchQuery);
  742. //
  743. // query = "QUERY mimetype:QUERY1 sort:content_length";
  744. // searchQuery = queryHelper.buildFacetQuery(query);
  745. // assertEquals("(title:QUERY OR content:QUERY) " + op + " mimetype:QUERY1", searchQuery);
  746. //
  747. // query = "QUERY sort:content_length.desc mimetype:QUERY1";
  748. // searchQuery = queryHelper.buildFacetQuery(query);
  749. // assertEquals("(title:QUERY OR content:QUERY) " + op + " mimetype:QUERY1", searchQuery);
  750. //
  751. // query = "QUERY sort:content_length.asc,last_modified mimetype:QUERY1";
  752. // searchQuery = queryHelper.buildFacetQuery(query);
  753. // assertEquals("(title:QUERY OR content:QUERY) " + op + " mimetype:QUERY1", searchQuery);
  754. // }
  755. // }
  756. //
  757. // public void test_buildFacet_sortField_invalid() {
  758. // String query;
  759. // String searchQuery;
  760. //
  761. // query = "sort:hoge";
  762. // searchQuery = queryHelper.buildFacetQuery(query);
  763. // assertEquals("", searchQuery);
  764. //
  765. // query = "sort:content_length.hoge";
  766. // searchQuery = queryHelper.buildFacetQuery(query);
  767. // assertEquals("", searchQuery);
  768. //
  769. // query = "sort:content_length.asc,hoge";
  770. // searchQuery = queryHelper.buildFacetQuery(query);
  771. // assertEquals("", searchQuery);
  772. // }
  773. //
  774. // public void test_buildFacet_wildcardSearches() {
  775. // for (final String op : new String[] { "AND", "OR" }) {
  776. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  777. // // *
  778. //
  779. // assertEquals("title:\\* OR content:\\*", queryHelper.buildFacetQuery("*"));
  780. // assertEquals("title:QUERY* OR content:QUERY*", queryHelper.buildFacetQuery("QUERY* "));
  781. // assertEquals("title:Q*ERY OR content:Q*ERY", queryHelper.buildFacetQuery(" Q*ERY"));
  782. //
  783. // assertEquals("(title:Q*ERY1 OR content:Q*ERY1) " + op + " (title:Q*ERY2 OR content:Q*ERY2)",
  784. // queryHelper.buildFacetQuery("Q*ERY1 Q*ERY2"));
  785. //
  786. // assertEquals("title:Q*ERY1\\ Q*ERY2 OR content:Q*ERY1\\ Q*ERY2", queryHelper.buildFacetQuery("\"Q*ERY1 Q*ERY2\""));
  787. //
  788. // assertEquals("(title:Q*ERY1\\ Q*ERY2 OR content:Q*ERY1\\ Q*ERY2) " + op + " (title:Q*ERY3 OR content:Q*ERY3)",
  789. // queryHelper.buildFacetQuery("\"Q*ERY1 Q*ERY2\" Q*ERY3"));
  790. //
  791. // assertEquals("mimetype:QUERY1*", queryHelper.buildFacetQuery("mimetype:QUERY1*"));
  792. // assertEquals("mimetype:QUERY1* " + op + " (title:QUERY2 OR content:QUERY2)",
  793. // queryHelper.buildFacetQuery("mimetype:QUERY1* QUERY2"));
  794. //
  795. // assertEquals("title:\\*QUERY1 OR content:\\*QUERY1", queryHelper.buildFacetQuery("*QUERY1"));
  796. // assertEquals("title:\\*QUERY1* OR content:\\*QUERY1*", queryHelper.buildFacetQuery("*QUERY1*"));
  797. //
  798. // // ?
  799. //
  800. // assertEquals("title:\\? OR content:\\?", queryHelper.buildFacetQuery("?"));
  801. // assertEquals("title:QUERY? OR content:QUERY?", queryHelper.buildFacetQuery("QUERY? "));
  802. // assertEquals("title:Q?ERY OR content:Q?ERY", queryHelper.buildFacetQuery(" Q?ERY"));
  803. //
  804. // assertEquals("(title:Q?ERY1 OR content:Q?ERY1) " + op + " (title:Q?ERY2 OR content:Q?ERY2)",
  805. // queryHelper.buildFacetQuery("Q?ERY1 Q?ERY2"));
  806. //
  807. // assertEquals("title:Q?ERY1\\ Q?ERY2 OR content:Q?ERY1\\ Q?ERY2", queryHelper.buildFacetQuery("\"Q?ERY1 Q?ERY2\""));
  808. //
  809. // assertEquals("(title:Q?ERY1\\ Q?ERY2 OR content:Q?ERY1\\ Q?ERY2) " + op + " (title:Q?ERY3 OR content:Q?ERY3)",
  810. // queryHelper.buildFacetQuery("\"Q?ERY1 Q?ERY2\" Q?ERY3"));
  811. //
  812. // assertEquals("mimetype:QUERY1?", queryHelper.buildFacetQuery("mimetype:QUERY1?"));
  813. // assertEquals("mimetype:QUERY1? " + op + " (title:QUERY2 OR content:QUERY2)",
  814. // queryHelper.buildFacetQuery("mimetype:QUERY1? QUERY2"));
  815. //
  816. // assertEquals("title:\\?QUERY1 OR content:\\?QUERY1", queryHelper.buildFacetQuery("?QUERY1"));
  817. // assertEquals("title:\\?QUERY1? OR content:\\?QUERY1?", queryHelper.buildFacetQuery("?QUERY1?"));
  818. // }
  819. // }
  820. //
  821. // public void test_buildFacet_fuzzySearches() {
  822. // for (final String op : new String[] { "AND", "OR" }) {
  823. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  824. // // ~
  825. //
  826. // assertEquals("title:QUERY OR content:QUERY", queryHelper.buildFacetQuery("QUERY~"));
  827. // assertEquals("(title:QUERY1 OR content:QUERY1) " + op + " (title:QUERY2 OR content:QUERY2)",
  828. // queryHelper.buildFacetQuery("QUERY1~ QUERY2"));
  829. // assertEquals("(title:QUERY1 OR content:QUERY1) " + op + " (title:QUERY2 OR content:QUERY2)",
  830. // queryHelper.buildFacetQuery("QUERY1~ QUERY2~"));
  831. //
  832. // assertEquals("mimetype:QUERY1~", queryHelper.buildFacetQuery("mimetype:QUERY1~"));
  833. // assertEquals("mimetype:QUERY1~ " + op + " (title:QUERY2 OR content:QUERY2)",
  834. // queryHelper.buildFacetQuery("mimetype:QUERY1~ QUERY2"));
  835. //
  836. // assertEquals("title:QUERY1\\ QUERY2 OR content:QUERY1\\ QUERY2", queryHelper.buildFacetQuery("\"QUERY1 QUERY2\"~"));
  837. // assertEquals("title:QUERY1 OR content:QUERY1", queryHelper.buildFacetQuery("\"QUERY1~\""));
  838. //
  839. // // ~0.8
  840. //
  841. // assertEquals("title:QUERY OR content:QUERY", queryHelper.buildFacetQuery("QUERY~0.8"));
  842. // assertEquals("(title:QUERY1 OR content:QUERY1) " + op + " (title:QUERY2 OR content:QUERY2)",
  843. // queryHelper.buildFacetQuery("QUERY1~0.8 QUERY2"));
  844. // assertEquals("(title:QUERY1 OR content:QUERY1) " + op + " (title:QUERY2 OR content:QUERY2)",
  845. // queryHelper.buildFacetQuery("QUERY1~0.5 QUERY2~0.8"));
  846. //
  847. // assertEquals("mimetype:QUERY1~0.8", queryHelper.buildFacetQuery("mimetype:QUERY1~0.8"));
  848. // assertEquals("mimetype:QUERY1~0.8 " + op + " (title:QUERY2 OR content:QUERY2)",
  849. // queryHelper.buildFacetQuery("mimetype:QUERY1~0.8 QUERY2"));
  850. //
  851. // assertEquals("title:QUERY1\\ QUERY2 OR content:QUERY1\\ QUERY2", queryHelper.buildFacetQuery("\"QUERY1 QUERY2\"~0.8"));
  852. // assertEquals("title:QUERY1 OR content:QUERY1", queryHelper.buildFacetQuery("\"QUERY1~0.8\""));
  853. //
  854. // assertEquals("title:QUERY1 OR content:QUERY1", queryHelper.buildFacetQuery("\"QUERY1~0.8a\""));
  855. // assertEquals("title:QUERY1 OR content:QUERY1", queryHelper.buildFacetQuery("\"QUERY1~a\""));
  856. // }
  857. //
  858. // getMockRequest().setLocale(Locale.JAPANESE);
  859. // for (final String op : new String[] { "AND", "OR" }) {
  860. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  861. // // ~
  862. //
  863. // assertEquals("title:QUERY OR content:QUERY OR content_ja:QUERY~", queryHelper.buildFacetQuery("QUERY~"));
  864. // assertEquals("(title:QUERY1 OR content:QUERY1 OR content_ja:QUERY1~) " + op
  865. // + " (title:QUERY2 OR content:QUERY2 OR content_ja:QUERY2)", queryHelper.buildFacetQuery("QUERY1~ QUERY2"));
  866. // assertEquals("(title:QUERY1 OR content:QUERY1 OR content_ja:QUERY1~) " + op
  867. // + " (title:QUERY2 OR content:QUERY2 OR content_ja:QUERY2~)", queryHelper.buildFacetQuery("QUERY1~ QUERY2~"));
  868. //
  869. // assertEquals("mimetype:QUERY1~", queryHelper.buildFacetQuery("mimetype:QUERY1~"));
  870. // assertEquals("mimetype:QUERY1~ " + op + " (title:QUERY2 OR content:QUERY2 OR content_ja:QUERY2)",
  871. // queryHelper.buildFacetQuery("mimetype:QUERY1~ QUERY2"));
  872. //
  873. // assertEquals("title:QUERY1\\ QUERY2 OR content:QUERY1\\ QUERY2 OR content_ja:QUERY1\\ QUERY2~",
  874. // queryHelper.buildFacetQuery("\"QUERY1 QUERY2\"~"));
  875. // assertEquals("title:QUERY1 OR content:QUERY1 OR content_ja:QUERY1~", queryHelper.buildFacetQuery("\"QUERY1~\""));
  876. //
  877. // // ~0.8
  878. //
  879. // assertEquals("title:QUERY OR content:QUERY OR content_ja:QUERY~0.8", queryHelper.buildFacetQuery("QUERY~0.8"));
  880. // assertEquals("(title:QUERY1 OR content:QUERY1 OR content_ja:QUERY1~0.8) " + op
  881. // + " (title:QUERY2 OR content:QUERY2 OR content_ja:QUERY2)", queryHelper.buildFacetQuery("QUERY1~0.8 QUERY2"));
  882. // assertEquals(
  883. // "(title:QUERY1 OR content:QUERY1 OR content_ja:QUERY1~0.5) " + op
  884. // + " (title:QUERY2 OR content:QUERY2 OR content_ja:QUERY2~0.8)",
  885. // queryHelper.buildFacetQuery("QUERY1~0.5 QUERY2~0.8"));
  886. //
  887. // assertEquals("mimetype:QUERY1~0.8", queryHelper.buildFacetQuery("mimetype:QUERY1~0.8"));
  888. // assertEquals("mimetype:QUERY1~0.8 " + op + " (title:QUERY2 OR content:QUERY2 OR content_ja:QUERY2)",
  889. // queryHelper.buildFacetQuery("mimetype:QUERY1~0.8 QUERY2"));
  890. //
  891. // assertEquals("title:QUERY1\\ QUERY2 OR content:QUERY1\\ QUERY2 OR content_ja:QUERY1\\ QUERY2~0.8",
  892. // queryHelper.buildFacetQuery("\"QUERY1 QUERY2\"~0.8"));
  893. // assertEquals("title:QUERY1 OR content:QUERY1 OR content_ja:QUERY1~0.8", queryHelper.buildFacetQuery("\"QUERY1~0.8\""));
  894. //
  895. // assertEquals("title:QUERY1 OR content:QUERY1 OR content_ja:QUERY1~0.8", queryHelper.buildFacetQuery("\"QUERY1~0.8a\""));
  896. // assertEquals("title:QUERY1 OR content:QUERY1 OR content_ja:QUERY1~", queryHelper.buildFacetQuery("\"QUERY1~a\""));
  897. // }
  898. // }
  899. //
  900. // public void test_buildFacet_proximitySearches() {
  901. // for (final String op : new String[] { "AND", "OR" }) {
  902. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  903. // // ~10
  904. // assertEquals("title:\"QUERY\"~10 OR content:\"QUERY\"~10", queryHelper.buildFacetQuery("QUERY~10"));
  905. // assertEquals("title:\"QUERY\"~1 OR content:\"QUERY\"~1", queryHelper.buildFacetQuery("QUERY~1"));
  906. // assertEquals("title:\"QUERY\"~5 OR content:\"QUERY\"~5", queryHelper.buildFacetQuery("QUERY~5.5"));
  907. // assertEquals("(title:\"QUERY1\"~10 OR content:\"QUERY1\"~10) " + op + " (title:QUERY2 OR content:QUERY2)",
  908. // queryHelper.buildFacetQuery("QUERY1~10 QUERY2"));
  909. // assertEquals("(title:\"QUERY1\"~5 OR content:\"QUERY1\"~5) " + op + " (title:\"QUERY2\"~10 OR content:\"QUERY2\"~10)",
  910. // queryHelper.buildFacetQuery("QUERY1~5 QUERY2~10"));
  911. //
  912. // assertEquals("mimetype:\"QUERY1\"~10", queryHelper.buildFacetQuery("mimetype:QUERY1~10"));
  913. // assertEquals("mimetype:\"QUERY1\"~10 " + op + " (title:QUERY2 OR content:QUERY2)",
  914. // queryHelper.buildFacetQuery("mimetype:QUERY1~10 QUERY2"));
  915. //
  916. // assertEquals("title:\"QUERY1\\ QUERY2\"~10 OR content:\"QUERY1\\ QUERY2\"~10",
  917. // queryHelper.buildFacetQuery("\"QUERY1 QUERY2\"~10"));
  918. // assertEquals("title:\"QUERY1\"~10 OR content:\"QUERY1\"~10", queryHelper.buildFacetQuery("\"QUERY1~10\""));
  919. //
  920. // assertEquals("title:\"QUERY1\"~10 OR content:\"QUERY1\"~10", queryHelper.buildFacetQuery("\"QUERY1~10a\""));
  921. // }
  922. // }
  923. //
  924. // public void test_buildFacet_rangeSearches() {
  925. // for (final String op : new String[] { "AND", "OR" }) {
  926. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  927. // // mod_date:[20020101 TO 20030101]
  928. // assertEquals("title:[20020101 TO 20030101] OR content:[20020101 TO 20030101]",
  929. // queryHelper.buildFacetQuery("[20020101 TO 20030101]"));
  930. // assertEquals("last_modified:[20020101 TO 20030101]", queryHelper.buildFacetQuery("last_modified:[20020101 TO 20030101]"));
  931. // assertEquals("(title:QUERY OR content:QUERY) " + op + " last_modified:[20020101 TO 20030101]",
  932. // queryHelper.buildFacetQuery("QUERY last_modified:[20020101 TO 20030101]"));
  933. //
  934. // // TODO more..
  935. //
  936. // // title:{Aida TO Carmen}
  937. // assertEquals("title:{Aida TO Carmen} OR content:{Aida TO Carmen}", queryHelper.buildFacetQuery("{Aida TO Carmen}"));
  938. // assertEquals("last_modified:{Aida TO Carmen}", queryHelper.buildFacetQuery("last_modified:{Aida TO Carmen}"));
  939. // assertEquals("(title:QUERY OR content:QUERY) " + op + " title:{Aida TO Carmen}",
  940. // queryHelper.buildFacetQuery("QUERY title:{Aida TO Carmen}"));
  941. //
  942. // // TODO more..
  943. // }
  944. // }
  945. //
  946. // public void test_buildFacet_boosting() {
  947. // for (final String op : new String[] { "AND", "OR" }) {
  948. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  949. // // ^1000 ""^1000
  950. // assertEquals("title:QUERY^1000 OR content:QUERY^1000", queryHelper.buildFacetQuery("QUERY^1000"));
  951. // assertEquals("(title:QUERY1^1000 OR content:QUERY1^1000) " + op + " (title:QUERY2 OR content:QUERY2)",
  952. // queryHelper.buildFacetQuery("QUERY1^1000 QUERY2"));
  953. // assertEquals("(title:QUERY1^500 OR content:QUERY1^500) " + op + " (title:QUERY2^1000 OR content:QUERY2^1000)",
  954. // queryHelper.buildFacetQuery("QUERY1^500 QUERY2^1000"));
  955. //
  956. // assertEquals("mimetype:QUERY1^1000", queryHelper.buildFacetQuery("mimetype:QUERY1^1000"));
  957. // assertEquals("mimetype:QUERY1^1000 " + op + " (title:QUERY2 OR content:QUERY2)",
  958. // queryHelper.buildFacetQuery("mimetype:QUERY1^1000 QUERY2"));
  959. //
  960. // assertEquals("title:QUERY1\\ QUERY2^1000 OR content:QUERY1\\ QUERY2^1000",
  961. // queryHelper.buildFacetQuery("\"QUERY1 QUERY2\"^1000"));
  962. // assertEquals("title:QUERY1^1000 OR content:QUERY1^1000", queryHelper.buildFacetQuery("\"QUERY1^1000\""));
  963. // }
  964. // }
  965. //
  966. // public void test_buildFacet_reserved() {
  967. // for (int i = 0; i < Constants.RESERVED.length - 1; i++) {
  968. // try {
  969. // assertEquals("title:\\" + Constants.RESERVED[i] + " OR content:\\" + Constants.RESERVED[i],
  970. // queryHelper.buildFacetQuery(Constants.RESERVED[i]));
  971. // } catch (final InvalidQueryException e) {
  972. // if (Constants.RESERVED[i].equals("\"") && e.getMessageCode().equals("errors.invalid_query_quoted")) {
  973. // assertEquals("title:\\" + Constants.RESERVED[i] + " OR content:\\" + Constants.RESERVED[i],
  974. // queryHelper.buildFacetQuery("\\" + Constants.RESERVED[i]));
  975. // continue;
  976. // } else if (Constants.RESERVED[i].equals("{") && e.getMessageCode().equals("errors.invalid_query_curly_bracket")) {
  977. // assertEquals("title:\\" + Constants.RESERVED[i] + " OR content:\\" + Constants.RESERVED[i],
  978. // queryHelper.buildFacetQuery("\\" + Constants.RESERVED[i]));
  979. // continue;
  980. // } else if (Constants.RESERVED[i].equals("[") && e.getMessageCode().equals("errors.invalid_query_square_bracket")) {
  981. // assertEquals("title:\\" + Constants.RESERVED[i] + " OR content:\\" + Constants.RESERVED[i],
  982. // queryHelper.buildFacetQuery("\\" + Constants.RESERVED[i]));
  983. // continue;
  984. // } else if (Constants.RESERVED[i].equals("(") && e.getMessageCode().equals("errors.invalid_query_parenthesis")) {
  985. // assertEquals("title:\\" + Constants.RESERVED[i] + " OR content:\\" + Constants.RESERVED[i],
  986. // queryHelper.buildFacetQuery("\\" + Constants.RESERVED[i]));
  987. // continue;
  988. // }
  989. // }
  990. // }
  991. // assertEquals("title:\\: OR content:\\:", queryHelper.buildFacetQuery(":"));
  992. // }
  993. //
  994. // public void test_buildFacet_or() {
  995. // for (final String op : new String[] { "AND", "OR" }) {
  996. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  997. // assertEquals("title:QUERY OR content:QUERY", queryHelper.buildFacetQuery("OR QUERY"));
  998. // assertEquals("(title:QUERY1 OR content:QUERY1) OR (title:QUERY2 OR content:QUERY2)",
  999. // queryHelper.buildFacetQuery("QUERY1 OR QUERY2"));
  1000. // assertEquals("title:QUERY", queryHelper.buildFacetQuery("OR title:QUERY"));
  1001. // assertEquals("title:QUERY1 OR title:QUERY2", queryHelper.buildFacetQuery("title:QUERY1 OR title:QUERY2"));
  1002. // assertEquals("(title:QUERY1 OR content:QUERY1) OR title:QUERY2", queryHelper.buildFacetQuery("QUERY1 OR title:QUERY2"));
  1003. // assertEquals("mimetype:QUERY1 OR title:QUERY2", queryHelper.buildFacetQuery("mimetype:QUERY1 OR title:QUERY2"));
  1004. // assertEquals("(title:QUERY1 OR content:QUERY1) OR (title:QUERY2 OR content:QUERY2) " + op + " (title:QUERY3 OR content:QUERY3)",
  1005. // queryHelper.buildFacetQuery("QUERY1 OR QUERY2 QUERY3"));
  1006. // assertEquals("(title:QUERY1 OR content:QUERY1) OR (title:QUERY2 OR content:QUERY2) OR (title:QUERY3 OR content:QUERY3)",
  1007. // queryHelper.buildFacetQuery("QUERY1 OR QUERY2 OR QUERY3"));
  1008. // }
  1009. // }
  1010. //
  1011. // public void test_buildFacet_and() {
  1012. // for (final String op : new String[] { "AND", "OR" }) {
  1013. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  1014. // assertEquals("title:QUERY OR content:QUERY", queryHelper.buildFacetQuery("AND QUERY"));
  1015. // assertEquals("(title:QUERY1 OR content:QUERY1) AND (title:QUERY2 OR content:QUERY2)",
  1016. // queryHelper.buildFacetQuery("QUERY1 AND QUERY2"));
  1017. // assertEquals("title:QUERY", queryHelper.buildFacetQuery("AND title:QUERY"));
  1018. // assertEquals("title:QUERY1 AND title:QUERY2", queryHelper.buildFacetQuery("title:QUERY1 AND title:QUERY2"));
  1019. // assertEquals("(title:QUERY1 OR content:QUERY1) AND title:QUERY2", queryHelper.buildFacetQuery("QUERY1 AND title:QUERY2"));
  1020. // assertEquals("mimetype:QUERY1 AND title:QUERY2", queryHelper.buildFacetQuery("mimetype:QUERY1 AND title:QUERY2"));
  1021. // assertEquals(
  1022. // "(title:QUERY1 OR content:QUERY1) AND (title:QUERY2 OR content:QUERY2) " + op + " (title:QUERY3 OR content:QUERY3)",
  1023. // queryHelper.buildFacetQuery("QUERY1 AND QUERY2 QUERY3"));
  1024. // assertEquals(
  1025. // "(title:QUERY1 OR content:QUERY1) " + op + " (title:QUERY2 OR content:QUERY2) AND (title:QUERY3 OR content:QUERY3)",
  1026. // queryHelper.buildFacetQuery("QUERY1 QUERY2 AND QUERY3"));
  1027. // assertEquals("(title:QUERY1 OR content:QUERY1) AND (title:QUERY2 OR content:QUERY2) AND (title:QUERY3 OR content:QUERY3)",
  1028. // queryHelper.buildFacetQuery("QUERY1 AND QUERY2 AND QUERY3"));
  1029. // }
  1030. // }
  1031. //
  1032. // public void test_buildFacet_not() {
  1033. // for (final String op : new String[] { "AND", "OR" }) {
  1034. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  1035. // assertEquals("NOT (title:QUERY OR content:QUERY)", queryHelper.buildFacetQuery("NOT QUERY"));
  1036. // assertEquals("NOT title:QUERY", queryHelper.buildFacetQuery("NOT title:QUERY"));
  1037. // assertEquals("(title:QUERY2 OR content:QUERY2) " + op + " NOT (title:QUERY1 OR content:QUERY1)",
  1038. // queryHelper.buildFacetQuery("NOT QUERY1 QUERY2"));
  1039. // assertEquals("(title:QUERY2 OR content:QUERY2) " + op + " NOT (title:QUERY1 OR content:QUERY1)",
  1040. // queryHelper.buildFacetQuery("NOT QUERY1 OR QUERY2"));
  1041. // assertEquals("NOT (title:QUERY1 OR content:QUERY1) " + op + " NOT (title:QUERY2 OR content:QUERY2)",
  1042. // queryHelper.buildFacetQuery("NOT QUERY1 NOT QUERY2"));
  1043. // assertEquals("NOT (title:QUERY1 OR content:QUERY1) " + op + " NOT (title:QUERY2 OR content:QUERY2)",
  1044. // queryHelper.buildFacetQuery("NOT QUERY1 OR NOT QUERY2"));
  1045. // assertEquals("(title:QUERY2 OR content:QUERY2) " + op + " NOT (title:QUERY1 OR content:QUERY1) " + op
  1046. // + " NOT (title:QUERY3 OR content:QUERY3)", queryHelper.buildFacetQuery("NOT QUERY1 QUERY2 NOT QUERY3"));
  1047. // assertEquals("NOT mimetype:QUERY", queryHelper.buildFacetQuery("NOT mimetype:QUERY"));
  1048. // assertEquals("NOT mimetype:QUERY1 " + op + " NOT title:QUERY2",
  1049. // queryHelper.buildFacetQuery("NOT mimetype:QUERY1 NOT title:QUERY2"));
  1050. // assertEquals("(title:QUERY2 OR content:QUERY2) " + op + " NOT mimetype:QUERY1",
  1051. // queryHelper.buildFacetQuery("NOT mimetype:QUERY1 QUERY2"));
  1052. // assertEquals("mimetype:QUERY2 " + op + " NOT (title:QUERY1 OR content:QUERY1)",
  1053. // queryHelper.buildFacetQuery("NOT QUERY1 mimetype:QUERY2"));
  1054. // }
  1055. // }
  1056. //
  1057. // public void test_inner_query() {
  1058. // for (final String op : new String[] { "AND", "OR" }) {
  1059. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  1060. // assertEquals("(title:bbb OR content:bbb) " + op + " (title:ccc OR content:ccc)",
  1061. // queryHelper.buildQuery("(bbb ccc)").getQuery());
  1062. // assertEquals("(title:bbb OR content:bbb) OR (title:ccc OR content:ccc)", queryHelper.buildQuery("(bbb OR ccc)").getQuery());
  1063. // assertEquals("(title:bbb OR content:bbb) AND (title:ccc OR content:ccc)", queryHelper.buildQuery("(bbb AND ccc)").getQuery());
  1064. //
  1065. // assertEquals("(title:aaa OR content:aaa) " + op + " ((title:bbb OR content:bbb) " + op + " (title:ccc OR content:ccc))",
  1066. // queryHelper.buildQuery("aaa (bbb ccc)").getQuery());
  1067. // assertEquals("(title:aaa OR content:aaa) " + op + " ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc))",
  1068. // queryHelper.buildQuery("aaa (bbb AND ccc)").getQuery());
  1069. // assertEquals("(title:aaa OR content:aaa) AND ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc))",
  1070. // queryHelper.buildQuery("aaa AND (bbb AND ccc)").getQuery());
  1071. // assertEquals("(title:aaa OR content:aaa) OR ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc))",
  1072. // queryHelper.buildQuery("aaa OR (bbb AND ccc)").getQuery());
  1073. //
  1074. // assertEquals("(title:aaa OR content:aaa) " + op + " ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc))",
  1075. // queryHelper.buildQuery("aaa (bbb OR ccc)").getQuery());
  1076. // assertEquals("(title:aaa OR content:aaa) AND ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc))",
  1077. // queryHelper.buildQuery("aaa AND (bbb OR ccc)").getQuery());
  1078. // assertEquals("(title:aaa OR content:aaa) OR ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc))",
  1079. // queryHelper.buildQuery("aaa OR (bbb OR ccc)").getQuery());
  1080. //
  1081. // assertEquals("((title:bbb OR content:bbb) " + op + " (title:ccc OR content:ccc)) " + op + " (title:ddd OR content:ddd)",
  1082. // queryHelper.buildQuery("(bbb ccc) ddd").getQuery());
  1083. // assertEquals("((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) " + op + " (title:ddd OR content:ddd)",
  1084. // queryHelper.buildQuery("(bbb AND ccc) ddd").getQuery());
  1085. // assertEquals("((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) AND (title:ddd OR content:ddd)",
  1086. // queryHelper.buildQuery("(bbb AND ccc) AND ddd").getQuery());
  1087. // assertEquals("((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) OR (title:ddd OR content:ddd)",
  1088. // queryHelper.buildQuery("(bbb AND ccc) OR ddd").getQuery());
  1089. //
  1090. // assertEquals("((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) " + op + " (title:ddd OR content:ddd)",
  1091. // queryHelper.buildQuery("(bbb OR ccc) ddd").getQuery());
  1092. // assertEquals("((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) AND (title:ddd OR content:ddd)",
  1093. // queryHelper.buildQuery("(bbb OR ccc) AND ddd").getQuery());
  1094. // assertEquals("((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) OR (title:ddd OR content:ddd)",
  1095. // queryHelper.buildQuery("(bbb OR ccc) OR ddd").getQuery());
  1096. //
  1097. // assertEquals("(title:aaa OR content:aaa) " + op + " ((title:bbb OR content:bbb) " + op + " (title:ccc OR content:ccc)) " + op
  1098. // + " (title:ddd OR content:ddd)", queryHelper.buildQuery("aaa (bbb ccc) ddd").getQuery());
  1099. // assertEquals("(title:aaa OR content:aaa) " + op + " ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) " + op
  1100. // + " (title:ddd OR content:ddd)", queryHelper.buildQuery("aaa (bbb AND ccc) ddd").getQuery());
  1101. // assertEquals(
  1102. // "(title:aaa OR content:aaa) AND ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) AND (title:ddd OR content:ddd)",
  1103. // queryHelper.buildQuery("aaa AND (bbb AND ccc) AND ddd").getQuery());
  1104. // assertEquals(
  1105. // "(title:aaa OR content:aaa) OR ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) OR (title:ddd OR content:ddd)",
  1106. // queryHelper.buildQuery("aaa OR (bbb AND ccc) OR ddd").getQuery());
  1107. //
  1108. // assertEquals("(title:aaa OR content:aaa) " + op + " ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) " + op
  1109. // + " (title:ddd OR content:ddd)", queryHelper.buildQuery("aaa (bbb OR ccc) ddd").getQuery());
  1110. // assertEquals(
  1111. // "(title:aaa OR content:aaa) AND ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) AND (title:ddd OR content:ddd)",
  1112. // queryHelper.buildQuery("aaa AND (bbb OR ccc) AND ddd").getQuery());
  1113. // assertEquals(
  1114. // "(title:aaa OR content:aaa) OR ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) OR (title:ddd OR content:ddd)",
  1115. // queryHelper.buildQuery("aaa OR (bbb OR ccc) OR ddd").getQuery());
  1116. //
  1117. // assertEquals("(title:aaa OR content:aaa) " + op + " (label:bbb " + op + " (title:ccc OR content:ccc))",
  1118. // queryHelper.buildQuery("aaa (label:bbb ccc)").getQuery());
  1119. // assertEquals("(title:aaa OR content:aaa) " + op + " (label:bbb AND (title:ccc OR content:ccc))",
  1120. // queryHelper.buildQuery("aaa (label:bbb AND ccc)").getQuery());
  1121. // assertEquals("(title:aaa OR content:aaa) " + op + " (label:bbb OR (title:ccc OR content:ccc))",
  1122. // queryHelper.buildQuery("aaa (label:bbb OR ccc)").getQuery());
  1123. //
  1124. // assertEquals("(title:aaa OR content:aaa) " + op + " ((title:bbb OR content:bbb) " + op + " label:ccc)",
  1125. // queryHelper.buildQuery("aaa (bbb label:ccc)").getQuery());
  1126. // assertEquals("(title:aaa OR content:aaa) " + op + " ((title:bbb OR content:bbb) AND label:ccc)",
  1127. // queryHelper.buildQuery("aaa (bbb AND label:ccc)").getQuery());
  1128. // assertEquals("(title:aaa OR content:aaa) " + op + " ((title:bbb OR content:bbb) OR label:ccc)",
  1129. // queryHelper.buildQuery("aaa (bbb OR label:ccc)").getQuery());
  1130. //
  1131. // assertEquals("(title:aaa OR content:aaa) " + op + " ((title:bbb OR content:bbb) " + op + " NOT (title:ccc OR content:ccc))",
  1132. // queryHelper.buildQuery("aaa (bbb NOT ccc)").getQuery());
  1133. // }
  1134. // }
  1135. //
  1136. // public void test_more_inner_query() {
  1137. // for (final String op : new String[] { "AND", "OR" }) {
  1138. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  1139. // assertEquals("(title:aaa OR content:aaa) " + op + " ((title:bbb OR content:bbb) " + op + " ((title:ccc OR content:ccc) " + op
  1140. // + " (title:ddd OR content:ddd)))", queryHelper.buildQuery("aaa (bbb (ccc ddd))").getQuery());
  1141. // assertEquals("(((title:aaa OR content:aaa) " + op + " (title:bbb OR content:bbb)) " + op + " (title:ccc OR content:ccc)) " + op
  1142. // + " (title:ddd OR content:ddd)", queryHelper.buildQuery("((aaa bbb) ccc) ddd").getQuery());
  1143. // }
  1144. // }
  1145. //
  1146. // public void test_inner_facetQuery() {
  1147. // for (final String op : new String[] { "AND", "OR" }) {
  1148. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  1149. // assertEquals("(title:bbb OR content:bbb) " + op + " (title:ccc OR content:ccc)", queryHelper.buildFacetQuery("(bbb ccc)"));
  1150. // assertEquals("(title:bbb OR content:bbb) OR (title:ccc OR content:ccc)", queryHelper.buildFacetQuery("(bbb OR ccc)"));
  1151. // assertEquals("(title:bbb OR content:bbb) AND (title:ccc OR content:ccc)", queryHelper.buildFacetQuery("(bbb AND ccc)"));
  1152. //
  1153. // assertEquals("(title:aaa OR content:aaa) " + op + " ((title:bbb OR content:bbb) " + op + " (title:ccc OR content:ccc))",
  1154. // queryHelper.buildFacetQuery("aaa (bbb ccc)"));
  1155. // assertEquals("(title:aaa OR content:aaa) " + op + " ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc))",
  1156. // queryHelper.buildFacetQuery("aaa (bbb AND ccc)"));
  1157. // assertEquals("(title:aaa OR content:aaa) AND ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc))",
  1158. // queryHelper.buildFacetQuery("aaa AND (bbb AND ccc)"));
  1159. // assertEquals("(title:aaa OR content:aaa) OR ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc))",
  1160. // queryHelper.buildFacetQuery("aaa OR (bbb AND ccc)"));
  1161. //
  1162. // assertEquals("(title:aaa OR content:aaa) " + op + " ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc))",
  1163. // queryHelper.buildFacetQuery("aaa (bbb OR ccc)"));
  1164. // assertEquals("(title:aaa OR content:aaa) AND ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc))",
  1165. // queryHelper.buildFacetQuery("aaa AND (bbb OR ccc)"));
  1166. // assertEquals("(title:aaa OR content:aaa) OR ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc))",
  1167. // queryHelper.buildFacetQuery("aaa OR (bbb OR ccc)"));
  1168. //
  1169. // assertEquals("((title:bbb OR content:bbb) " + op + " (title:ccc OR content:ccc)) " + op + " (title:ddd OR content:ddd)",
  1170. // queryHelper.buildFacetQuery("(bbb ccc) ddd"));
  1171. // assertEquals("((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) " + op + " (title:ddd OR content:ddd)",
  1172. // queryHelper.buildFacetQuery("(bbb AND ccc) ddd"));
  1173. // assertEquals("((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) AND (title:ddd OR content:ddd)",
  1174. // queryHelper.buildFacetQuery("(bbb AND ccc) AND ddd"));
  1175. // assertEquals("((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) OR (title:ddd OR content:ddd)",
  1176. // queryHelper.buildFacetQuery("(bbb AND ccc) OR ddd"));
  1177. //
  1178. // assertEquals("((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) " + op + " (title:ddd OR content:ddd)",
  1179. // queryHelper.buildFacetQuery("(bbb OR ccc) ddd"));
  1180. // assertEquals("((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) AND (title:ddd OR content:ddd)",
  1181. // queryHelper.buildFacetQuery("(bbb OR ccc) AND ddd"));
  1182. // assertEquals("((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) OR (title:ddd OR content:ddd)",
  1183. // queryHelper.buildFacetQuery("(bbb OR ccc) OR ddd"));
  1184. //
  1185. // assertEquals("(title:aaa OR content:aaa) " + op + " ((title:bbb OR content:bbb) " + op + " (title:ccc OR content:ccc)) " + op
  1186. // + " (title:ddd OR content:ddd)", queryHelper.buildFacetQuery("aaa (bbb ccc) ddd"));
  1187. // assertEquals("(title:aaa OR content:aaa) " + op + " ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) " + op
  1188. // + " (title:ddd OR content:ddd)", queryHelper.buildFacetQuery("aaa (bbb AND ccc) ddd"));
  1189. // assertEquals(
  1190. // "(title:aaa OR content:aaa) AND ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) AND (title:ddd OR content:ddd)",
  1191. // queryHelper.buildFacetQuery("aaa AND (bbb AND ccc) AND ddd"));
  1192. // assertEquals(
  1193. // "(title:aaa OR content:aaa) OR ((title:bbb OR content:bbb) AND (title:ccc OR content:ccc)) OR (title:ddd OR content:ddd)",
  1194. // queryHelper.buildFacetQuery("aaa OR (bbb AND ccc) OR ddd"));
  1195. //
  1196. // assertEquals("(title:aaa OR content:aaa) " + op + " ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) " + op
  1197. // + " (title:ddd OR content:ddd)", queryHelper.buildFacetQuery("aaa (bbb OR ccc) ddd"));
  1198. // assertEquals(
  1199. // "(title:aaa OR content:aaa) AND ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) AND (title:ddd OR content:ddd)",
  1200. // queryHelper.buildFacetQuery("aaa AND (bbb OR ccc) AND ddd"));
  1201. // assertEquals(
  1202. // "(title:aaa OR content:aaa) OR ((title:bbb OR content:bbb) OR (title:ccc OR content:ccc)) OR (title:ddd OR content:ddd)",
  1203. // queryHelper.buildFacetQuery("aaa OR (bbb OR ccc) OR ddd"));
  1204. //
  1205. // assertEquals("(title:aaa OR content:aaa) " + op + " (label:bbb " + op + " (title:ccc OR content:ccc))",
  1206. // queryHelper.buildFacetQuery("aaa (label:bbb ccc)"));
  1207. // assertEquals("(title:aaa OR content:aaa) " + op + " (label:bbb AND (title:ccc OR content:ccc))",
  1208. // queryHelper.buildFacetQuery("aaa (label:bbb AND ccc)"));
  1209. // assertEquals("(title:aaa OR content:aaa) " + op + " (label:bbb OR (title:ccc OR content:ccc))",
  1210. // queryHelper.buildFacetQuery("aaa (label:bbb OR ccc)"));
  1211. //
  1212. // assertEquals("(title:aaa OR content:aaa) " + op + " ((title:bbb OR content:bbb) " + op + " label:ccc)",
  1213. // queryHelper.buildFacetQuery("aaa (bbb label:ccc)"));
  1214. // assertEquals("(title:aaa OR content:aaa) " + op + " ((title:bbb OR content:bbb) AND label:ccc)",
  1215. // queryHelper.buildFacetQuery("aaa (bbb AND label:ccc)"));
  1216. // assertEquals("(title:aaa OR content:aaa) " + op + " ((title:bbb OR content:bbb) OR label:ccc)",
  1217. // queryHelper.buildFacetQuery("aaa (bbb OR label:ccc)"));
  1218. //
  1219. // assertEquals("(title:aaa OR content:aaa) " + op + " ((title:bbb OR content:bbb) " + op + " NOT (title:ccc OR content:ccc))",
  1220. // queryHelper.buildFacetQuery("aaa (bbb NOT ccc)"));
  1221. // }
  1222. // }
  1223. //
  1224. // public void test_more_inner_facetQuery() {
  1225. // for (final String op : new String[] { "AND", "OR" }) {
  1226. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  1227. // assertEquals("(title:aaa OR content:aaa) " + op + " ((title:bbb OR content:bbb) " + op + " ((title:ccc OR content:ccc) " + op
  1228. // + " (title:ddd OR content:ddd)))", queryHelper.buildFacetQuery("aaa (bbb (ccc ddd))"));
  1229. // assertEquals("(((title:aaa OR content:aaa) " + op + " (title:bbb OR content:bbb)) " + op + " (title:ccc OR content:ccc)) " + op
  1230. // + " (title:ddd OR content:ddd)", queryHelper.buildFacetQuery("((aaa bbb) ccc) ddd"));
  1231. // }
  1232. // }
  1233. //
  1234. // public void test_quote_query() {
  1235. // final String[] formats =
  1236. // { "%s", " %s ", "aaa %s", "aaa OR %s", "NOT %s", "%s bbb", "%s bbb", "%s OR bbb", "aaa (%s)", "(%s) bbb", "aaa (%s) bbb" };
  1237. // for (final String format : formats) {
  1238. // assertException(format, "\"", "errors.invalid_query_quoted");
  1239. // assertException(format, "a\"", "errors.invalid_query_quoted");
  1240. // assertException(format, "\"b", "errors.invalid_query_quoted");
  1241. // assertException(format, "a\"b", "errors.invalid_query_quoted");
  1242. // assertException(format, "content:\"", "errors.invalid_query_quoted");
  1243. // assertException(format, "content:\" ", "errors.invalid_query_quoted");
  1244. // assertException(format, "content:a\"", "errors.invalid_query_quoted");
  1245. // assertException(format, "content:\"b", "errors.invalid_query_quoted");
  1246. // assertException(format, "content:a\"b", "errors.invalid_query_quoted");
  1247. // }
  1248. // }
  1249. //
  1250. // public void test_curly_bracket_query() {
  1251. // queryHelper = new QueryHelper();
  1252. // inject(new FieldHelper());
  1253. // inject(new SystemHelper());
  1254. // inject(queryHelper);
  1255. // final String[] formats =
  1256. // { "%s", " %s ", "aaa %s", "aaa OR %s", "NOT %s", "%s bbb", "%s bbb", "%s OR bbb", "aaa (%s)", "(%s) bbb", "aaa (%s) bbb" };
  1257. // for (final String format : formats) {
  1258. // assertException(format, "{", "errors.invalid_query_curly_bracket");
  1259. // assertException(format, "a{", "errors.invalid_query_curly_bracket");
  1260. // assertException(format, "{b", "errors.invalid_query_curly_bracket");
  1261. // assertException(format, "a{b", "errors.invalid_query_curly_bracket");
  1262. // assertException(format, "content:{", "errors.invalid_query_curly_bracket");
  1263. // assertException(format, "content:{ ", "errors.invalid_query_curly_bracket");
  1264. // assertException(format, "content:a{", "errors.invalid_query_curly_bracket");
  1265. // assertException(format, "content:{b", "errors.invalid_query_curly_bracket");
  1266. // assertException(format, "content:a{b", "errors.invalid_query_curly_bracket");
  1267. // }
  1268. // }
  1269. //
  1270. // public void test_square_bracket_query() {
  1271. // final String[] formats =
  1272. // { "%s", " %s ", "aaa %s", "aaa OR %s", "NOT %s", "%s bbb", "%s bbb", "%s OR bbb", "aaa (%s)", "(%s) bbb", "aaa (%s) bbb" };
  1273. // for (final String format : formats) {
  1274. // assertException(format, "[", "errors.invalid_query_square_bracket");
  1275. // assertException(format, "a[", "errors.invalid_query_square_bracket");
  1276. // assertException(format, "[b", "errors.invalid_query_square_bracket");
  1277. // assertException(format, "a[b", "errors.invalid_query_square_bracket");
  1278. // assertException(format, "content:[", "errors.invalid_query_square_bracket");
  1279. // assertException(format, "content:[ ", "errors.invalid_query_square_bracket");
  1280. // assertException(format, "content:a[", "errors.invalid_query_square_bracket");
  1281. // assertException(format, "content:[b", "errors.invalid_query_square_bracket");
  1282. // assertException(format, "content:a[b", "errors.invalid_query_square_bracket");
  1283. // }
  1284. // }
  1285. //
  1286. // public void test_parenthesis_query() {
  1287. // final String[] formats =
  1288. // { "%s", " %s ", "aaa %s", "aaa OR %s", "NOT %s", "%s bbb", "%s bbb", "%s OR bbb", "aaa (%s)", "(%s) bbb", "aaa (%s) bbb" };
  1289. // for (final String format : formats) {
  1290. // assertException(format, "(", "errors.invalid_query_parenthesis");
  1291. // assertException(format, "a(", "errors.invalid_query_parenthesis");
  1292. // assertException(format, "(b", "errors.invalid_query_parenthesis");
  1293. // assertException(format, "a(b", "errors.invalid_query_parenthesis");
  1294. // assertException(format, "content:(", "errors.invalid_query_parenthesis");
  1295. // assertException(format, "content:( ", "errors.invalid_query_parenthesis");
  1296. // assertException(format, "content:a(", "errors.invalid_query_parenthesis");
  1297. // assertException(format, "content:(b", "errors.invalid_query_parenthesis");
  1298. // assertException(format, "content:a(b", "errors.invalid_query_parenthesis");
  1299. // }
  1300. // }
  1301. //
  1302. // private void assertException(final String format, final String query, final String messageCode) {
  1303. // try {
  1304. // final String ret = queryHelper.buildQuery(String.format(format, query)).getQuery();
  1305. // fail("format: " + format + ", query: " + query + ", ret: " + ret);
  1306. // } catch (final InvalidQueryException e) {
  1307. // FessMessages messages = new FessMessages();
  1308. // e.getMessageCode().message(messages);
  1309. // if (!messages.hasMessageOf(UserMessages.GLOBAL_PROPERTY_KEY, messageCode)) {
  1310. // throw e;
  1311. // }
  1312. // }
  1313. // }
  1314. //
  1315. // public void test_quote_facetQuery() {
  1316. // final String[] formats =
  1317. // { "%s", " %s ", "aaa %s", "aaa OR %s", "NOT %s", "%s bbb", "%s bbb", "%s OR bbb", "aaa (%s)", "(%s) bbb", "aaa (%s) bbb" };
  1318. // for (final String format : formats) {
  1319. // assertExceptionOnFacetQuery(format, "\"", "errors.invalid_query_quoted");
  1320. // assertExceptionOnFacetQuery(format, "a\"", "errors.invalid_query_quoted");
  1321. // assertExceptionOnFacetQuery(format, "\"b", "errors.invalid_query_quoted");
  1322. // assertExceptionOnFacetQuery(format, "a\"b", "errors.invalid_query_quoted");
  1323. // assertExceptionOnFacetQuery(format, "content:\"", "errors.invalid_query_quoted");
  1324. // assertExceptionOnFacetQuery(format, "content:\" ", "errors.invalid_query_quoted");
  1325. // assertExceptionOnFacetQuery(format, "content:a\"", "errors.invalid_query_quoted");
  1326. // assertExceptionOnFacetQuery(format, "content:\"b", "errors.invalid_query_quoted");
  1327. // assertExceptionOnFacetQuery(format, "content:a\"b", "errors.invalid_query_quoted");
  1328. // }
  1329. // }
  1330. //
  1331. // public void test_curly_bracket_facetQuery() {
  1332. // final String[] formats =
  1333. // { "%s", " %s ", "aaa %s", "aaa OR %s", "NOT %s", "%s bbb", "%s bbb", "%s OR bbb", "aaa (%s)", "(%s) bbb", "aaa (%s) bbb" };
  1334. // for (final String format : formats) {
  1335. // assertExceptionOnFacetQuery(format, "{", "errors.invalid_query_curly_bracket");
  1336. // assertExceptionOnFacetQuery(format, "a{", "errors.invalid_query_curly_bracket");
  1337. // assertExceptionOnFacetQuery(format, "{b", "errors.invalid_query_curly_bracket");
  1338. // assertExceptionOnFacetQuery(format, "a{b", "errors.invalid_query_curly_bracket");
  1339. // assertExceptionOnFacetQuery(format, "content:{", "errors.invalid_query_curly_bracket");
  1340. // assertExceptionOnFacetQuery(format, "content:{ ", "errors.invalid_query_curly_bracket");
  1341. // assertExceptionOnFacetQuery(format, "content:a{", "errors.invalid_query_curly_bracket");
  1342. // assertExceptionOnFacetQuery(format, "content:{b", "errors.invalid_query_curly_bracket");
  1343. // assertExceptionOnFacetQuery(format, "content:a{b", "errors.invalid_query_curly_bracket");
  1344. // }
  1345. // }
  1346. //
  1347. // public void test_square_bracket_facetQuery() {
  1348. // final String[] formats =
  1349. // { "%s", " %s ", "aaa %s", "aaa OR %s", "NOT %s", "%s bbb", "%s bbb", "%s OR bbb", "aaa (%s)", "(%s) bbb", "aaa (%s) bbb" };
  1350. // for (final String format : formats) {
  1351. // assertExceptionOnFacetQuery(format, "[", "errors.invalid_query_square_bracket");
  1352. // assertExceptionOnFacetQuery(format, "a[", "errors.invalid_query_square_bracket");
  1353. // assertExceptionOnFacetQuery(format, "[b", "errors.invalid_query_square_bracket");
  1354. // assertExceptionOnFacetQuery(format, "a[b", "errors.invalid_query_square_bracket");
  1355. // assertExceptionOnFacetQuery(format, "content:[", "errors.invalid_query_square_bracket");
  1356. // assertExceptionOnFacetQuery(format, "content:[ ", "errors.invalid_query_square_bracket");
  1357. // assertExceptionOnFacetQuery(format, "content:a[", "errors.invalid_query_square_bracket");
  1358. // assertExceptionOnFacetQuery(format, "content:[b", "errors.invalid_query_square_bracket");
  1359. // assertExceptionOnFacetQuery(format, "content:a[b", "errors.invalid_query_square_bracket");
  1360. // }
  1361. // }
  1362. //
  1363. // public void test_parenthesis_facetQuery() {
  1364. // final String[] formats =
  1365. // { "%s", " %s ", "aaa %s", "aaa OR %s", "NOT %s", "%s bbb", "%s bbb", "%s OR bbb", "aaa (%s)", "(%s) bbb", "aaa (%s) bbb" };
  1366. // for (final String format : formats) {
  1367. // assertExceptionOnFacetQuery(format, "(", "errors.invalid_query_parenthesis");
  1368. // assertExceptionOnFacetQuery(format, "a(", "errors.invalid_query_parenthesis");
  1369. // assertExceptionOnFacetQuery(format, "(b", "errors.invalid_query_parenthesis");
  1370. // assertExceptionOnFacetQuery(format, "a(b", "errors.invalid_query_parenthesis");
  1371. // assertExceptionOnFacetQuery(format, "content:(", "errors.invalid_query_parenthesis");
  1372. // assertExceptionOnFacetQuery(format, "content:( ", "errors.invalid_query_parenthesis");
  1373. // assertExceptionOnFacetQuery(format, "content:a(", "errors.invalid_query_parenthesis");
  1374. // assertExceptionOnFacetQuery(format, "content:(b", "errors.invalid_query_parenthesis");
  1375. // assertExceptionOnFacetQuery(format, "content:a(b", "errors.invalid_query_parenthesis");
  1376. // }
  1377. // }
  1378. //
  1379. // public void test_buildContentQueryWithLang() {
  1380. // StringBuilder buf;
  1381. //
  1382. // buf = new StringBuilder();
  1383. // queryHelper.buildContentQueryWithLang(buf, "aaa", null);
  1384. // assertEquals("(title:aaa OR content:aaa)", buf.toString());
  1385. //
  1386. // buf = new StringBuilder();
  1387. // queryHelper.buildContentQueryWithLang(buf, "aaa", "ja");
  1388. // assertEquals("(title:aaa OR content:aaa OR content_ja:aaa)", buf.toString());
  1389. //
  1390. // buf = new StringBuilder();
  1391. // queryHelper.buildContentQueryWithLang(buf, "aaa", "zh_CN");
  1392. // assertEquals("(title:aaa OR content:aaa OR content_zh_CN:aaa)", buf.toString());
  1393. // }
  1394. //
  1395. // public void test_getQueryLanguage() {
  1396. // assertNull(queryHelper.getQueryLanguage());
  1397. // final MockletHttpServletRequest request = getMockRequest();
  1398. // request.setLocale(Locale.JAPAN);
  1399. // assertEquals("ja", queryHelper.getQueryLanguage());
  1400. // request.setLocale(Locale.SIMPLIFIED_CHINESE);
  1401. // assertEquals("zh_CN", queryHelper.getQueryLanguage());
  1402. // queryHelper.addFieldLanguage("zh_CN", "cjk");
  1403. // assertEquals("cjk", queryHelper.getQueryLanguage());
  1404. // request.setLocale(Locale.CHINESE);
  1405. // assertEquals("zh", queryHelper.getQueryLanguage());
  1406. // request.setLocale(Locale.CANADA_FRENCH);
  1407. // assertEquals("fr", queryHelper.getQueryLanguage());
  1408. // request.setLocale(new Locale("aa"));
  1409. // assertNull(queryHelper.getQueryLanguage());
  1410. // }
  1411. //
  1412. // public void test_buildWithLang() {
  1413. // final MockletHttpServletRequest request = getMockRequest();
  1414. // request.setLocale(Locale.JAPAN);
  1415. //
  1416. // for (final String op : new String[] { "AND", "OR" }) {
  1417. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  1418. // assertEquals("", queryHelper.buildQuery("").getQuery());
  1419. //
  1420. // assertEquals("title:QUERY OR content:QUERY OR content_ja:QUERY", queryHelper.buildQuery("QUERY").getQuery());
  1421. // assertEquals("title:QUERY OR content:QUERY OR content_ja:QUERY", queryHelper.buildQuery("QUERY ").getQuery());
  1422. // assertEquals("title:QUERY OR content:QUERY OR content_ja:QUERY", queryHelper.buildQuery(" QUERY").getQuery());
  1423. //
  1424. // assertEquals(
  1425. // "(title:QUERY1 OR content:QUERY1 OR content_ja:QUERY1) " + op
  1426. // + " NOT (title:QUERY2 OR content:QUERY2 OR content_ja:QUERY2)",
  1427. // queryHelper.buildQuery("QUERY1 NOT QUERY2").getQuery());
  1428. //
  1429. // assertEquals("(title:QUERY1 OR content:QUERY1 OR content_ja:QUERY1) " + op
  1430. // + " (title:QUERY2 OR content:QUERY2 OR content_ja:QUERY2)", queryHelper.buildQuery("QUERY1 QUERY2").getQuery());
  1431. // assertEquals(
  1432. // "(title:QUERY1 OR content:QUERY1 OR content_ja:QUERY1) " + op
  1433. // + " (title:QUERY2 OR content:QUERY2 OR content_ja:QUERY2)",
  1434. // queryHelper.buildQuery("QUERY1 QUERY2 ").getQuery());
  1435. // assertEquals(
  1436. // "(title:QUERY1 OR content:QUERY1 OR content_ja:QUERY1) " + op
  1437. // + " (title:QUERY2 OR content:QUERY2 OR content_ja:QUERY2)",
  1438. // queryHelper.buildQuery(" QUERY1 QUERY2").getQuery());
  1439. // }
  1440. // }
  1441. //
  1442. // public void test_unbracketQuery() {
  1443. // assertEquals("", queryHelper.unbracketQuery(""));
  1444. // assertEquals("", queryHelper.unbracketQuery("()"));
  1445. // assertEquals("", queryHelper.unbracketQuery("(())"));
  1446. // assertEquals("()()", queryHelper.unbracketQuery("()()"));
  1447. // assertEquals("()()", queryHelper.unbracketQuery("(()())"));
  1448. // assertEquals("()()()", queryHelper.unbracketQuery("()()()"));
  1449. // assertEquals("()(()())", queryHelper.unbracketQuery("()(()())"));
  1450. //
  1451. // assertEquals("(", queryHelper.unbracketQuery("("));
  1452. // assertEquals(")", queryHelper.unbracketQuery(")"));
  1453. // assertEquals("()(", queryHelper.unbracketQuery("()("));
  1454. // assertEquals("())", queryHelper.unbracketQuery("())"));
  1455. // assertEquals(")()", queryHelper.unbracketQuery(")()"));
  1456. // assertEquals("(()", queryHelper.unbracketQuery("(()"));
  1457. //
  1458. // assertEquals("\\(", queryHelper.unbracketQuery("(\\()"));
  1459. // assertEquals("\\)", queryHelper.unbracketQuery("(\\))"));
  1460. // assertEquals("(\\\\()", queryHelper.unbracketQuery("(\\\\()"));
  1461. // assertEquals("(\\\\))", queryHelper.unbracketQuery("(\\\\))"));
  1462. // assertEquals("\\\\\\(", queryHelper.unbracketQuery("(\\\\\\()"));
  1463. // assertEquals("\\\\\\)", queryHelper.unbracketQuery("(\\\\\\))"));
  1464. // }
  1465. //
  1466. // public void test_appendRangeQueryValue() {
  1467. // StringBuilder buf = new StringBuilder();
  1468. // queryHelper.appendRangeQueryValue(buf, "[1 TO 2]", '[', ']');
  1469. // assertEquals("[1 TO 2]", buf.toString());
  1470. //
  1471. // buf = new StringBuilder();
  1472. // queryHelper.appendRangeQueryValue(buf, "[1234 TO 2345]", '[', ']');
  1473. // assertEquals("[1234 TO 2345]", buf.toString());
  1474. //
  1475. // buf = new StringBuilder();
  1476. // queryHelper.appendRangeQueryValue(buf, "[* TO 2345]", '[', ']');
  1477. // assertEquals("[* TO 2345]", buf.toString());
  1478. //
  1479. // buf = new StringBuilder();
  1480. // queryHelper.appendRangeQueryValue(buf, "[1234 TO *]", '[', ']');
  1481. // assertEquals("[1234 TO *]", buf.toString());
  1482. //
  1483. // buf = new StringBuilder();
  1484. //
  1485. // try {
  1486. // queryHelper.appendRangeQueryValue(buf, "[* TO *]", '[', ']');
  1487. // fail();
  1488. // } catch (final InvalidQueryException e) {}
  1489. //
  1490. // try {
  1491. // queryHelper.appendRangeQueryValue(buf, "[1]", '[', ']');
  1492. // fail();
  1493. // } catch (final InvalidQueryException e) {}
  1494. //
  1495. // try {
  1496. // queryHelper.appendRangeQueryValue(buf, "[1 TO]", '[', ']');
  1497. // fail();
  1498. // } catch (final InvalidQueryException e) {}
  1499. //
  1500. // try {
  1501. // queryHelper.appendRangeQueryValue(buf, "[1 TO ]", '[', ']');
  1502. // fail();
  1503. // } catch (final InvalidQueryException e) {}
  1504. //
  1505. // try {
  1506. // queryHelper.appendRangeQueryValue(buf, "[TO 1]", '[', ']');
  1507. // fail();
  1508. // } catch (final InvalidQueryException e) {}
  1509. //
  1510. // try {
  1511. // queryHelper.appendRangeQueryValue(buf, "[ TO 1]", '[', ']');
  1512. // fail();
  1513. // } catch (final InvalidQueryException e) {}
  1514. // }
  1515. //
  1516. // public void test_inurl() {
  1517. // for (final String op : new String[] { "AND", "OR" }) {
  1518. // getMockRequest().setAttribute(Constants.DEFAULT_OPERATOR, op);
  1519. // assertEquals("url:*QUERY*", queryHelper.buildQuery("inurl:QUERY").getQuery());
  1520. // assertEquals("url:*QUERY1* " + op + " url:*QUERY2*", queryHelper.buildQuery("inurl:QUERY1 inurl:QUERY2").getQuery());
  1521. // assertEquals("(title:aaa OR content:aaa) " + op + " url:*QUERY1* " + op + " url:*QUERY2*",
  1522. // queryHelper.buildQuery("aaa inurl:QUERY1 inurl:QUERY2").getQuery());
  1523. // assertEquals("url:*QUERY*", queryHelper.buildQuery("inurl:\"QUERY\"").getQuery());
  1524. // }
  1525. // }
  1526. //
  1527. // public void test_buildOptionQuery() {
  1528. // final Map<String, String[]> options = new HashMap<>();
  1529. //
  1530. // assertEquals("", queryHelper.buildOptionQuery(null));
  1531. // assertEquals("", queryHelper.buildOptionQuery(options));
  1532. //
  1533. // // Q
  1534. //
  1535. // options.clear();
  1536. // options.put(Constants.OPTION_QUERY_Q, new String[] { "a" });
  1537. // assertEquals("a", queryHelper.buildOptionQuery(options));
  1538. //
  1539. // options.clear();
  1540. // options.put(Constants.OPTION_QUERY_Q, new String[] { "a b" });
  1541. // assertEquals("a b", queryHelper.buildOptionQuery(options));
  1542. //
  1543. // options.clear();
  1544. // options.put(Constants.OPTION_QUERY_Q, new String[] { "a b c" });
  1545. // assertEquals("a b c", queryHelper.buildOptionQuery(options));
  1546. //
  1547. // options.clear();
  1548. // options.put(Constants.OPTION_QUERY_Q, new String[] { "\"a b\"" });
  1549. // assertEquals("\"a b\"", queryHelper.buildOptionQuery(options));
  1550. //
  1551. // options.clear();
  1552. // options.put(Constants.OPTION_QUERY_Q, new String[] { "\"a b\" c" });
  1553. // assertEquals("\"a b\" c", queryHelper.buildOptionQuery(options));
  1554. //
  1555. // options.clear();
  1556. // options.put(Constants.OPTION_QUERY_Q, new String[] { "\"a b\" \"c d\"" });
  1557. // assertEquals("\"a b\" \"c d\"", queryHelper.buildOptionQuery(options));
  1558. //
  1559. // // CQ
  1560. //
  1561. // options.clear();
  1562. // options.put(Constants.OPTION_QUERY_CQ, new String[] { "a" });
  1563. // assertEquals("\"a\"", queryHelper.buildOptionQuery(options));
  1564. //
  1565. // options.clear();
  1566. // options.put(Constants.OPTION_QUERY_CQ, new String[] { "a b" });
  1567. // assertEquals("\"a b\"", queryHelper.buildOptionQuery(options));
  1568. //
  1569. // options.clear();
  1570. // options.put(Constants.OPTION_QUERY_CQ, new String[] { "a b c" });
  1571. // assertEquals("\"a b c\"", queryHelper.buildOptionQuery(options));
  1572. //
  1573. // options.clear();
  1574. // options.put(Constants.OPTION_QUERY_CQ, new String[] { "\"a b\"" });
  1575. // assertEquals("\"a b\"", queryHelper.buildOptionQuery(options));
  1576. //
  1577. // options.clear();
  1578. // options.put(Constants.OPTION_QUERY_CQ, new String[] { "\"a b\" c" });
  1579. // assertEquals("\"a b\" \"c\"", queryHelper.buildOptionQuery(options));
  1580. //
  1581. // options.clear();
  1582. // options.put(Constants.OPTION_QUERY_CQ, new String[] { "\"a b\" \"c d\"" });
  1583. // assertEquals("\"a b\" \"c d\"", queryHelper.buildOptionQuery(options));
  1584. //
  1585. // // OQ
  1586. //
  1587. // options.clear();
  1588. // options.put(Constants.OPTION_QUERY_OQ, new String[] { "a" });
  1589. // assertEquals("a", queryHelper.buildOptionQuery(options));
  1590. //
  1591. // options.clear();
  1592. // options.put(Constants.OPTION_QUERY_OQ, new String[] { "a b" });
  1593. // assertEquals("a OR b", queryHelper.buildOptionQuery(options));
  1594. //
  1595. // options.clear();
  1596. // options.put(Constants.OPTION_QUERY_OQ, new String[] { "a b c" });
  1597. // assertEquals("a OR b OR c", queryHelper.buildOptionQuery(options));
  1598. //
  1599. // options.clear();
  1600. // options.put(Constants.OPTION_QUERY_OQ, new String[] { "\"a b\"" });
  1601. // assertEquals("\"a b\"", queryHelper.buildOptionQuery(options));
  1602. //
  1603. // options.clear();
  1604. // options.put(Constants.OPTION_QUERY_OQ, new String[] { "\"a b\" c" });
  1605. // assertEquals("\"a b\" OR c", queryHelper.buildOptionQuery(options));
  1606. //
  1607. // options.clear();
  1608. // options.put(Constants.OPTION_QUERY_OQ, new String[] { "\"a b\" \"c d\"" });
  1609. // assertEquals("\"a b\" OR \"c d\"", queryHelper.buildOptionQuery(options));
  1610. //
  1611. // // NQ
  1612. //
  1613. // options.clear();
  1614. // options.put(Constants.OPTION_QUERY_NQ, new String[] { "a" });
  1615. // assertEquals("NOT a", queryHelper.buildOptionQuery(options));
  1616. //
  1617. // options.clear();
  1618. // options.put(Constants.OPTION_QUERY_NQ, new String[] { "a b" });
  1619. // assertEquals("NOT a NOT b", queryHelper.buildOptionQuery(options));
  1620. //
  1621. // options.clear();
  1622. // options.put(Constants.OPTION_QUERY_NQ, new String[] { "a b c" });
  1623. // assertEquals("NOT a NOT b NOT c", queryHelper.buildOptionQuery(options));
  1624. //
  1625. // options.clear();
  1626. // options.put(Constants.OPTION_QUERY_NQ, new String[] { "\"a b\"" });
  1627. // assertEquals("NOT \"a b\"", queryHelper.buildOptionQuery(options));
  1628. //
  1629. // options.clear();
  1630. // options.put(Constants.OPTION_QUERY_NQ, new String[] { "\"a b\" c" });
  1631. // assertEquals("NOT \"a b\" NOT c", queryHelper.buildOptionQuery(options));
  1632. //
  1633. // options.clear();
  1634. // options.put(Constants.OPTION_QUERY_NQ, new String[] { "\"a b\" \"c d\"" });
  1635. // assertEquals("NOT \"a b\" NOT \"c d\"", queryHelper.buildOptionQuery(options));
  1636. //
  1637. // // combine
  1638. //
  1639. // options.clear();
  1640. // options.put(Constants.OPTION_QUERY_Q, new String[] { "a" });
  1641. // options.put(Constants.OPTION_QUERY_CQ, new String[] { "b" });
  1642. // options.put(Constants.OPTION_QUERY_OQ, new String[] { "c" });
  1643. // options.put(Constants.OPTION_QUERY_NQ, new String[] { "d" });
  1644. // assertEquals("a \"b\" c NOT d", queryHelper.buildOptionQuery(options));
  1645. //
  1646. // options.clear();
  1647. // options.put(Constants.OPTION_QUERY_Q, new String[] { "a 1" });
  1648. // options.put(Constants.OPTION_QUERY_CQ, new String[] { "b 2" });
  1649. // options.put(Constants.OPTION_QUERY_OQ, new String[] { "c 3" });
  1650. // options.put(Constants.OPTION_QUERY_NQ, new String[] { "d 4" });
  1651. // assertEquals("a 1 \"b 2\" (c OR 3) NOT d NOT 4", queryHelper.buildOptionQuery(options));
  1652. // }
  1653. //
  1654. // private void assertExceptionOnFacetQuery(final String format, final String query, final String messageCode) {
  1655. // try {
  1656. // final String ret = queryHelper.buildFacetQuery(String.format(format, query));
  1657. // fail("format: " + format + ", query: " + query + ", ret: " + ret);
  1658. // } catch (final InvalidQueryException e) {
  1659. // FessMessages messages = new FessMessages();
  1660. // e.getMessageCode().message(messages);
  1661. // if (!messages.hasMessageOf(UserMessages.GLOBAL_PROPERTY_KEY, messageCode)) {
  1662. // throw e;
  1663. // }
  1664. // }
  1665. // }
  1666. //
  1667. // public void test_getQueryParamMap() {
  1668. // assertEquals(0, queryHelper.getQueryParamMap().size());
  1669. //
  1670. // Map<String, String[]> queryParamMap;
  1671. //
  1672. // queryHelper.addQueryParam("aaa", new String[] { "111" });
  1673. // queryHelper.addQueryParam("bbb", new String[] { "222", "$333" });
  1674. // queryParamMap = queryHelper.getQueryParamMap();
  1675. // assertEquals(2, queryParamMap.size());
  1676. // assertEquals(1, queryParamMap.get("aaa").length);
  1677. // assertEquals("111", queryParamMap.get("aaa")[0]);
  1678. // assertEquals(2, queryParamMap.get("bbb").length);
  1679. // assertEquals("222", queryParamMap.get("bbb")[0]);
  1680. // assertEquals("", queryParamMap.get("bbb")[1]);
  1681. //
  1682. // getMockRequest().setParameter("333", "AAA");
  1683. // queryParamMap = queryHelper.getQueryParamMap();
  1684. // assertEquals(2, queryParamMap.size());
  1685. // assertEquals(1, queryParamMap.get("aaa").length);
  1686. // assertEquals("111", queryParamMap.get("aaa")[0]);
  1687. // assertEquals(2, queryParamMap.get("bbb").length);
  1688. // assertEquals("222", queryParamMap.get("bbb")[0]);
  1689. // assertEquals("AAA", queryParamMap.get("bbb")[1]);
  1690. //
  1691. // }
  1692. }