Changeset 3605
- Timestamp:
- 2002-12-02T10:05:19+13:00 (21 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/gsdl3/src/java/org/greenstone/gsdl3/service/MGPPGDBMServices.java
r3567 r3605 51 51 private static final String TEXT_QUERY_SERVICE = "TextQuery"; 52 52 private static final String FIELD_QUERY_SERVICE = "FieldQuery"; 53 private static final String ADVANCED_FIELD_QUERY_SERVICE = "AdvancedFieldQuery"; 53 54 private static final String RESOURCE_RETRIEVE_SERVICE = "ResourceRetrieve"; 54 55 private static final String METADATA_RETRIEVE_SERVICE = "MetadataRetrieve"; … … 68 69 private static final String BOOLEAN_PARAM_ON = "1"; 69 70 private static final String BOOLEAN_PARAM_OFF = "0"; 71 private static final String QUERY_PARAM = "query"; 72 private static final String SIMPLE_FIELD_PARAM = "simpleField"; 73 private static final String ADVANCED_FIELD_PARAM = "complexField"; 74 // more params for field query 75 private static final String FIELD_QUERY_PARAM = "fqv"; 76 private static final String FIELD_STEM_PARAM = "fqs"; 77 private static final String FIELD_CASE_PARAM = "fqc"; 78 private static final String FIELD_FIELD_PARAM = "fqf"; 79 private static final String FIELD_COMBINE_PARAM = "fqk"; 80 private static final String FIELD_COMBINE_PARAM_AND = "0"; 81 private static final String FIELD_COMBINE_PARAM_OR = "1"; 82 private static final String FIELD_COMBINE_PARAM_NOT = "2"; 70 83 71 84 // elements used in the config file that are specific to this class … … 130 143 e.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_QUERY); 131 144 e.setAttribute(GSXML.NAME_ATT, FIELD_QUERY_SERVICE); 145 short_service_info_.appendChild(e); 146 147 e = doc_.createElement(GSXML.SERVICE_ELEM); 148 e.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_QUERY); 149 e.setAttribute(GSXML.NAME_ATT, ADVANCED_FIELD_QUERY_SERVICE); 132 150 short_service_info_.appendChild(e); 133 151 … … 157 175 e.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_QUERY); 158 176 e.setAttribute(GSXML.NAME_ATT, FIELD_QUERY_SERVICE); 177 Element param_list1 = doc_.createElement(GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER); 178 createFieldQueryParamList(param_list1, false, null); 179 e.appendChild(param_list1); 159 180 service_info_map_.put(FIELD_QUERY_SERVICE, e); 160 181 182 e = doc_.createElement(GSXML.SERVICE_ELEM); 183 e.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_QUERY); 184 e.setAttribute(GSXML.NAME_ATT, ADVANCED_FIELD_QUERY_SERVICE); 185 Element param_list2 = doc_.createElement(GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER); 186 createAdvancedFieldQueryParamList(param_list2, false, null); 187 e.appendChild(param_list2); 188 service_info_map_.put(ADVANCED_FIELD_QUERY_SERVICE, e); 189 161 190 e = doc_.createElement(GSXML.SERVICE_ELEM); 162 191 e.setAttribute(GSXML.TYPE_ATT, GSXML.SERVICE_TYPE_QUERY); … … 268 297 } 269 298 param_list.appendChild(param); 299 300 // for now add the query itself as a param 301 if (display) { 302 param = GSXML.createParameterDisplay(doc_, QUERY_PARAM, getTextString("param."+QUERY_PARAM, lang), null, null); 303 } else { 304 param = GSXML.createParameter(doc_, QUERY_PARAM, GSXML.PARAM_TYPE_STRING, null, null); 305 } 306 param_list.appendChild(param); 307 270 308 return true; 271 309 } 272 310 /** this creates all teh params and appends them to param_list. 311 * if display=true it creates the text strings version 312 * otherwise it creates the description version 313 */ 314 protected boolean createFieldQueryParamList(Element param_list, boolean display, String lang) { 315 Element param; 316 317 // first do index and level params 318 319 // the index info - read from config file 320 // Element index_list = (Element)GSXML.getChildByTagName(config_info_, INDEX_ELEM+GSXML.LIST_MODIFIER); 321 // NodeList indexes = index_list.getElementsByTagName(INDEX_ELEM); 322 // int len = indexes.getLength(); 323 // if (len > 1) { 324 // // add level param to list 325 // String [] inds = new String[len]; 326 // for (int i=0; i<len; i++) { 327 // inds[i] = ((Element)indexes.item(i)).getAttribute(GSXML.NAME_ATT); 328 // } 329 // if (display) { 330 // // use the same index names for now - should get these out of the config info 331 // param = GSXML.createParameterDisplay(doc_, INDEX_PARAM, getTextString("param."+INDEX_PARAM, lang), inds, inds); 332 // } else { 333 // param = GSXML.createParameter(doc_, INDEX_PARAM, GSXML.PARAM_TYPE_ENUM_SINGLE, default_index_, inds); 334 // } 335 // param_list.appendChild(param); 336 // } // else dont need to add it 337 338 // the level info - read from config file 339 Element level_list = (Element)GSXML.getChildByTagName(config_info_, LEVEL_ELEM+GSXML.LIST_MODIFIER); 340 NodeList levels = level_list.getElementsByTagName(LEVEL_ELEM); 341 int len = levels.getLength(); 342 if (len > 1) { 343 // add level param to list 344 String [] levs = new String[len]; 345 for (int i=0; i<len; i++) { 346 levs[i] = ((Element)levels.item(i)).getAttribute(GSXML.NAME_ATT); 347 } 348 if (display) { 349 param = GSXML.createParameterDisplay(doc_, LEVEL_PARAM, getTextString("param."+LEVEL_PARAM, lang), levs, levs); 350 } else { 351 param = GSXML.createParameter(doc_, LEVEL_PARAM, GSXML.PARAM_TYPE_ENUM_SINGLE, default_level_, levs); 352 } 353 param_list.appendChild(param); 354 } // else dont need to add it 355 356 // enum params 357 String []vals = {MATCH_PARAM_ALL, MATCH_PARAM_SOME}; 358 if (display) { 359 String []val_texts = {getTextString("param."+MATCH_PARAM+"."+MATCH_PARAM_ALL, lang),getTextString("param."+MATCH_PARAM+"."+MATCH_PARAM_SOME, lang)}; 360 361 param = GSXML.createParameterDisplay(doc_, MATCH_PARAM, getTextString("param."+MATCH_PARAM, lang), vals, val_texts); 362 } else { 363 param = GSXML.createParameter(doc_, MATCH_PARAM, GSXML.PARAM_TYPE_ENUM_SINGLE, MATCH_PARAM_ALL, vals); 364 } 365 param_list.appendChild(param); 366 String [] vals1 = {RANK_PARAM_RANK, RANK_PARAM_NONE }; 367 if (display) { 368 String [] vals1_texts = { getTextString("param."+RANK_PARAM+"."+RANK_PARAM_RANK, lang), 369 getTextString("param."+RANK_PARAM+"."+RANK_PARAM_NONE, lang)}; 370 371 param = GSXML.createParameterDisplay(doc_, RANK_PARAM, getTextString("param."+RANK_PARAM, lang), vals1, vals1_texts); 372 } else { 373 param = GSXML.createParameter(doc_, RANK_PARAM, GSXML.PARAM_TYPE_ENUM_SINGLE, RANK_PARAM_RANK, vals1 ); 374 } 375 param_list.appendChild(param); 376 377 // boolean params 378 if (display) { 379 String[] bool_ops = {"0", "1"}; 380 String[] bool_texts = {getTextString("param.boolean.off", lang),getTextString("param.boolean.on", lang)}; 381 param = GSXML.createParameterDisplay(doc_, FIELD_CASE_PARAM, getTextString("param."+FIELD_CASE_PARAM, lang), bool_ops, bool_texts); 382 param_list.appendChild(param); 383 param = GSXML.createParameterDisplay(doc_, FIELD_STEM_PARAM, getTextString("param."+FIELD_STEM_PARAM, lang), bool_ops, bool_texts); 384 param_list.appendChild(param); 385 386 } else { 387 param = GSXML.createParameter(doc_, FIELD_CASE_PARAM, GSXML.PARAM_TYPE_BOOLEAN, BOOLEAN_PARAM_ON, null); 388 param_list.appendChild(param); 389 param = GSXML.createParameter(doc_, FIELD_STEM_PARAM, GSXML.PARAM_TYPE_BOOLEAN, BOOLEAN_PARAM_ON, null); 390 param_list.appendChild(param); 391 } 392 393 // Integer params 394 if (display) { 395 param = GSXML.createParameterDisplay(doc_, MAXDOCS_PARAM, getTextString("param."+MAXDOCS_PARAM, lang), null, null); 396 } else { 397 param = GSXML.createParameter(doc_, MAXDOCS_PARAM, GSXML.PARAM_TYPE_INTEGER, "10", null); 398 } 399 param_list.appendChild(param); 400 401 // create a multi param for the fields etc 402 // text box, stem, case, field 403 404 Element multiparam = null;; 405 406 if (display) { 407 param = GSXML.createParameterDisplay(doc_, SIMPLE_FIELD_PARAM, "", null, null); 408 param_list.appendChild(param); 409 } else { 410 multiparam = GSXML.createParameter(doc_, SIMPLE_FIELD_PARAM, GSXML.PARAM_TYPE_MULTI, null, null); 411 multiparam.setAttribute("occurs", "4"); 412 param_list.appendChild(multiparam); 413 } 414 // the components 415 // the text box 416 if (display) { 417 param = GSXML.createParameterDisplay(doc_, FIELD_QUERY_PARAM, getTextString("param."+FIELD_QUERY_PARAM, lang), null, null); 418 param_list.appendChild(param); 419 } else { 420 param = GSXML.createParameter(doc_, FIELD_QUERY_PARAM, GSXML.PARAM_TYPE_STRING, null, null); 421 multiparam.appendChild(param); 422 423 } 424 425 // the field list - should be read from config file 426 String [] vals2 = {"TX", "SU", "TI"}; 427 String [] vals2_texts = {"TextOnly", "Subject", "Title"}; 428 429 if (display) { 430 param = GSXML.createParameterDisplay(doc_, FIELD_FIELD_PARAM, getTextString("param."+FIELD_FIELD_PARAM, lang), vals2, vals2_texts); 431 param_list.appendChild(param); 432 } else { 433 param = GSXML.createParameter(doc_, FIELD_FIELD_PARAM, GSXML.PARAM_TYPE_ENUM_SINGLE, "", vals2 ); 434 multiparam.appendChild(param); 435 } 436 437 return true; 438 } 439 440 protected boolean createAdvancedFieldQueryParamList(Element param_list, boolean display, String lang) { 441 Element param; 442 443 // first do index and level params 444 445 // the index info - read from config file 446 // Element index_list = (Element)GSXML.getChildByTagName(config_info_, INDEX_ELEM+GSXML.LIST_MODIFIER); 447 // NodeList indexes = index_list.getElementsByTagName(INDEX_ELEM); 448 // int len = indexes.getLength(); 449 // if (len > 1) { 450 // // add level param to list 451 // String [] inds = new String[len]; 452 // for (int i=0; i<len; i++) { 453 // inds[i] = ((Element)indexes.item(i)).getAttribute(GSXML.NAME_ATT); 454 // } 455 // if (display) { 456 // // use the same index names for now - should get these out of the config info 457 // param = GSXML.createParameterDisplay(doc_, INDEX_PARAM, getTextString("param."+INDEX_PARAM, lang), inds, inds); 458 // } else { 459 // param = GSXML.createParameter(doc_, INDEX_PARAM, GSXML.PARAM_TYPE_ENUM_SINGLE, default_index_, inds); 460 // } 461 // param_list.appendChild(param); 462 // } // else dont need to add it 463 464 // the level info - read from config file 465 Element level_list = (Element)GSXML.getChildByTagName(config_info_, LEVEL_ELEM+GSXML.LIST_MODIFIER); 466 NodeList levels = level_list.getElementsByTagName(LEVEL_ELEM); 467 int len = levels.getLength(); 468 if (len > 1) { 469 // add level param to list 470 String [] levs = new String[len]; 471 for (int i=0; i<len; i++) { 472 levs[i] = ((Element)levels.item(i)).getAttribute(GSXML.NAME_ATT); 473 } 474 if (display) { 475 param = GSXML.createParameterDisplay(doc_, LEVEL_PARAM, getTextString("param."+LEVEL_PARAM, lang), levs, levs); 476 } else { 477 param = GSXML.createParameter(doc_, LEVEL_PARAM, GSXML.PARAM_TYPE_ENUM_SINGLE, default_level_, levs); 478 } 479 param_list.appendChild(param); 480 } // else dont need to add it 481 482 // // enum params 483 // String []vals = {MATCH_PARAM_ALL, MATCH_PARAM_SOME}; 484 // if (display) { 485 // String []val_texts = {getTextString("param."+MATCH_PARAM+"."+MATCH_PARAM_ALL, lang),getTextString("param."+MATCH_PARAM+"."+MATCH_PARAM_SOME, lang)}; 486 487 // param = GSXML.createParameterDisplay(doc_, MATCH_PARAM, getTextString("param."+MATCH_PARAM, lang), vals, val_texts); 488 // } else { 489 // param = GSXML.createParameter(doc_, MATCH_PARAM, GSXML.PARAM_TYPE_ENUM_SINGLE, MATCH_PARAM_ALL, vals); 490 // } 491 // param_list.appendChild(param); 492 493 String [] vals1 = {RANK_PARAM_RANK, RANK_PARAM_NONE }; 494 if (display) { 495 String [] vals1_texts = { getTextString("param."+RANK_PARAM+"."+RANK_PARAM_RANK, lang), 496 getTextString("param."+RANK_PARAM+"."+RANK_PARAM_NONE, lang)}; 497 498 param = GSXML.createParameterDisplay(doc_, RANK_PARAM, getTextString("param."+RANK_PARAM, lang), vals1, vals1_texts); 499 } else { 500 param = GSXML.createParameter(doc_, RANK_PARAM, GSXML.PARAM_TYPE_ENUM_SINGLE, RANK_PARAM_RANK, vals1 ); 501 } 502 param_list.appendChild(param); 503 504 // Integer params 505 if (display) { 506 param = GSXML.createParameterDisplay(doc_, MAXDOCS_PARAM, getTextString("param."+MAXDOCS_PARAM, lang), null, null); 507 } else { 508 param = GSXML.createParameter(doc_, MAXDOCS_PARAM, GSXML.PARAM_TYPE_INTEGER, "10", null); 509 } 510 param_list.appendChild(param); 511 512 // create a multi param for the fields etc 513 // text box, stem, case, field 514 515 Element multiparam = null; 516 if (display) { 517 param = GSXML.createParameterDisplay(doc_, ADVANCED_FIELD_PARAM, "", null, null); 518 param_list.appendChild(param); 519 } else { 520 multiparam = GSXML.createParameter(doc_, ADVANCED_FIELD_PARAM, GSXML.PARAM_TYPE_MULTI, null, null); 521 multiparam.setAttribute("occurs", "4"); 522 param_list.appendChild(multiparam); 523 } 524 525 // the components 526 527 //the combiners 528 529 String []vals = {FIELD_COMBINE_PARAM_AND, FIELD_COMBINE_PARAM_OR, FIELD_COMBINE_PARAM_NOT}; 530 if (display) { 531 String []val_texts = {getTextString("param."+FIELD_COMBINE_PARAM+"."+FIELD_COMBINE_PARAM_AND, lang), getTextString("param."+FIELD_COMBINE_PARAM+"."+FIELD_COMBINE_PARAM_OR, lang), getTextString("param."+FIELD_COMBINE_PARAM+"."+FIELD_COMBINE_PARAM_NOT, lang)}; 532 533 param = GSXML.createParameterDisplay(doc_, FIELD_COMBINE_PARAM, "", vals, val_texts); 534 param_list.appendChild(param); 535 } else { 536 param = GSXML.createParameter(doc_, FIELD_COMBINE_PARAM, GSXML.PARAM_TYPE_ENUM_SINGLE, FIELD_COMBINE_PARAM_AND, vals); 537 param.setAttribute(GSXML.PARAM_IGNORE_POS_ATT, "0"); 538 multiparam.appendChild(param); 539 } 540 541 // the text box 542 if (display) { 543 param = GSXML.createParameterDisplay(doc_, FIELD_QUERY_PARAM, getTextString("param."+FIELD_QUERY_PARAM, lang), null, null); 544 param_list.appendChild(param); 545 } else { 546 param = GSXML.createParameter(doc_, FIELD_QUERY_PARAM, GSXML.PARAM_TYPE_STRING, null, null); 547 multiparam.appendChild(param); 548 549 } 550 551 // boolean params 552 if (display) { 553 String[] bool_ops = {"0", "1"}; 554 String[] bool_texts = {getTextString("param.boolean.off", lang),getTextString("param.boolean.on", lang)}; 555 param = GSXML.createParameterDisplay(doc_, FIELD_CASE_PARAM, getTextString("param."+FIELD_CASE_PARAM, lang), bool_ops, bool_texts); 556 param_list.appendChild(param); 557 param = GSXML.createParameterDisplay(doc_, FIELD_STEM_PARAM, getTextString("param."+FIELD_STEM_PARAM, lang), bool_ops, bool_texts); 558 param_list.appendChild(param); 559 560 } else { 561 param = GSXML.createParameter(doc_, FIELD_CASE_PARAM, GSXML.PARAM_TYPE_BOOLEAN, BOOLEAN_PARAM_ON, null); 562 multiparam.appendChild(param); 563 param = GSXML.createParameter(doc_, FIELD_STEM_PARAM, GSXML.PARAM_TYPE_BOOLEAN, BOOLEAN_PARAM_ON, null); 564 multiparam.appendChild(param); 565 } 566 567 // the field list 568 String [] vals2 = {"TX", "SU", "TI"}; 569 String [] vals2_texts = {"TextOnly", "Subject", "Title"}; 570 571 if (display) { 572 param = GSXML.createParameterDisplay(doc_, FIELD_FIELD_PARAM, getTextString("param."+FIELD_FIELD_PARAM, lang), vals2, vals2_texts); 573 param_list.appendChild(param); 574 } else { 575 param = GSXML.createParameter(doc_, FIELD_FIELD_PARAM, GSXML.PARAM_TYPE_ENUM_SINGLE, "", vals2 ); 576 multiparam.appendChild(param); 577 } 578 579 return true; 580 } 273 581 /** creates a display element containing all the text strings needed to display the service page, in the language specified */ 274 582 protected Element createServiceDisplay(String service, String lang) { … … 282 590 createTextQueryParamList(display, true, lang); 283 591 } 592 // now need to add in the params 593 if (service.equals(FIELD_QUERY_SERVICE)) { 594 595 createFieldQueryParamList(display, true, lang); 596 } 597 // now need to add in the params 598 if (service.equals(ADVANCED_FIELD_QUERY_SERVICE)) { 599 600 createAdvancedFieldQueryParamList(display, true, lang); 601 } 284 602 return display; 285 603 … … 295 613 return processTextQuery(request); 296 614 } else if(name.equals(FIELD_QUERY_SERVICE)) { 297 return processFieldQuery(request); 615 return processFieldQuery(request, "simple"); 616 } else if(name.equals(ADVANCED_FIELD_QUERY_SERVICE)) { 617 return processFieldQuery(request, "advanced"); 298 618 } else if (name.equals(RESOURCE_RETRIEVE_SERVICE)) { 299 619 return processResourceRetrieve(request); … … 317 637 318 638 // get param list and content 319 Element param_elem=null;639 /*Element param_elem=null; 320 640 Element content_elem=null; 321 641 Node n = request.getFirstChild(); … … 334 654 return result; // empty result 335 655 } 336 656 */ 657 658 // get param list 659 Element param_list = (Element)GSXML.getChildByTagName(request, GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER); 660 if (param_list==null) { 661 System.err.println("MGPPGDBMServices, TextQuery Error: no param list in request!"); 662 return result; // empty result 663 } 664 /* 337 665 // get the query string 338 666 String query = GSXML.getNodeText(content_elem); … … 341 669 return result; 342 670 } 343 344 HashMap params = GSXML.extractParams(param_elem); 671 */ 672 HashMap params = GSXML.extractParams(param_list); 673 String query = (String)params.get(QUERY_PARAM); 674 if (query == null) { 675 // nothing to query 676 return result; 677 } 678 345 679 String index = (String)params.get(INDEX_PARAM); 346 680 if (index==null) { // if its not present, use the default index … … 354 688 355 689 mgpp_src_.loadIndexData(basedir, indexdir); 356 set QueryParams(params);690 setStandardQueryParams(params); 357 691 358 692 mgpp_src_.runQuery(query); … … 381 715 382 716 /** process a fielded query */ 383 protected Element processFieldQuery(Element request) { 717 protected Element processFieldQuery(Element request, String type) { 718 719 System.out.println("processing Field Query..."); 384 720 Element result = doc_.createElement(GSXML.RESPONSE_ELEM); 385 721 String from = GSPath.appendLink(cluster_name_, FIELD_QUERY_SERVICE); 386 722 result.setAttribute(GSXML.FROM_ATT, from); 387 723 result.setAttribute(GSXML.TYPE_ATT, GSXML.REQUEST_TYPE_QUERY); 388 389 390 // dummy result 391 Text t = null; 392 t = doc_.createTextNode(FIELD_QUERY_SERVICE+" result... "); 393 result.appendChild(t); 724 725 // get param list 726 Element param_list = (Element)GSXML.getChildByTagName(request, GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER); 727 if (param_list==null) { 728 System.err.println("MGPPGDBMServices, FieldQuery Error: no param list in request!"); 729 return result; // empty result 730 } 731 732 HashMap params = GSXML.extractAllParams(param_list); 733 printHash(params); 734 735 //check one of the params to see if it is present 736 String test_param = (String)params.get(FIELD_QUERY_PARAM); 737 if (test_param == null) { // no query 738 return result; 739 } 740 741 742 /* String index = (String)params.get(INDEX_PARAM); 743 if (index==null) { // if its not present, use the default index 744 index=default_index_; 745 }*/ 746 // for now we are using the default index 747 String index = default_index_; 748 749 // now set up the mgpp stuff 750 String basedir = GSFile.collectionBaseDir(site_home_, 751 cluster_name_); 752 String indexdir = GSFile.collectionIndexPath(cluster_name_, index); 753 754 mgpp_src_.loadIndexData(basedir, indexdir); 755 setStandardQueryParams(params); 756 757 String query=""; 758 if (type.equals("simple")) { 759 query = parseFieldQueryParams(params); 760 } else if (type.equals("advanced")) { 761 query = parseAdvancedFieldQueryParams(params); 762 } 763 System.out.println("query="+query); 764 mgpp_src_.runQuery(query); 765 MGPPQueryResult mqr= mgpp_src_.getQueryResult(); 766 767 // get the docnums out, and convert to HASH ids 768 Vector docs = mqr.getDocs(); 769 if (docs.size()==0) { 770 // no docs found 771 return result; 772 } 773 // create a resourceList element 774 Element c = doc_.createElement(GSXML.CONTENT_ELEM); 775 result.appendChild(c); 776 Element resource_list = doc_.createElement(GSXML.RESOURCE_ELEM+GSXML.LIST_MODIFIER); 777 c.appendChild(resource_list); 778 // add each resource 779 for (int d=0; d<docs.size(); d++) { 780 long docnum = ((MGPPDocInfo)docs.elementAt(d)).num_; 781 String id = gdbm_src_.docnum2Oid(docnum); 782 Node no = GSXML.createResourceElement(doc_, id); 783 resource_list.appendChild(no); 784 } 394 785 return result; 395 786 } … … 528 919 529 920 // should probably use a list rather than map 530 protected boolean set QueryParams(HashMap params) {921 protected boolean setStandardQueryParams(HashMap params) { 531 922 532 923 // set the default ones … … 566 957 } 567 958 568 569 } 959 protected String parseFieldQueryParams(HashMap params) { 960 961 StringBuffer final_query = new StringBuffer(256); 962 String text_line = (String)params.get(FIELD_QUERY_PARAM); 963 String[] texts = text_line.split(",", -1); 964 String field_line = (String)params.get(FIELD_FIELD_PARAM); 965 String[] fields = field_line.split(",", -1); 966 String combine="&"; 967 String match = (String)params.get(MATCH_PARAM); 968 if (match.equals(MATCH_PARAM_SOME)) { 969 combine = "|"; 970 } 971 972 for (int i=0; i<texts.length; i++) { 973 974 String q = texts[i].trim(); 975 if (!q.equals("")) { 976 addQueryElem(final_query, q, fields[i], combine); 977 } 978 } 979 980 System.out.println("final query = "+final_query.toString()); 981 return final_query.toString(); 982 } 983 984 protected String parseAdvancedFieldQueryParams(HashMap params) { 985 986 StringBuffer final_query = new StringBuffer(256); 987 String text_line = (String)params.get(FIELD_QUERY_PARAM); 988 String[] texts = text_line.split(",", -1); 989 String field_line = (String)params.get(FIELD_FIELD_PARAM); 990 String[] fields = field_line.split(",", -1); 991 String case_line = (String)params.get(FIELD_CASE_PARAM); 992 String[] cases = case_line.split(",", -1); 993 String stem_line = (String)params.get(FIELD_STEM_PARAM); 994 String[] stems = stem_line.split(",", -1); 995 String combine_line = (String)params.get(FIELD_COMBINE_PARAM); 996 String [] combines = combine_line.split(",", -1); 997 String combine = "&"; 998 for (int i=0; i<texts.length; i++) { 999 if (i==0) { 1000 combine = ""; 1001 } else { 1002 String x = combines[i-1]; // assume first one is missing 1003 if (x.equals(FIELD_COMBINE_PARAM_AND)) { 1004 combine = "&"; 1005 } else if (x.equals(FIELD_COMBINE_PARAM_OR)) { 1006 combine = "|"; 1007 } else if (x.equals(FIELD_COMBINE_PARAM_NOT)) { 1008 combine = "!"; 1009 } 1010 1011 } 1012 1013 String q = texts[i].trim(); 1014 if (!q.equals("")) { 1015 q = addStemAndCase(q, stems[i], cases[i]); 1016 addQueryElem(final_query, q, fields[i], combine); 1017 } 1018 } 1019 1020 System.out.println("final query = "+final_query.toString()); 1021 return final_query.toString(); 1022 } 1023 1024 protected void addQueryElem(StringBuffer s, String q, String f, String c) { 1025 1026 String combine=""; 1027 if (s.length()>0) { 1028 combine = " "+c+" "; 1029 } 1030 if (f!="") { 1031 s.append(combine+"["+q+"]:"+f); 1032 } else { 1033 s.append(combine+q); 1034 } 1035 } 1036 protected String addStemAndCase(String q, String c, String s) { 1037 String mods = "#"; 1038 if (c=="1") { 1039 mods += "c"; 1040 } 1041 if (s=="1") { 1042 mods += "s"; 1043 } 1044 if (mods.equals("#")) { 1045 return q; 1046 } 1047 StringBuffer temp = new StringBuffer(); 1048 String [] terms = q.split(" "); 1049 for (int i=0; i<terms.length; i++) { 1050 String t = terms[i].trim(); 1051 1052 if (!t.equals("") && !t.equals("TX")) { 1053 temp.append(" "+t+mods); 1054 } 1055 } 1056 return temp.toString(); 1057 } 1058 1059 protected void printHash(HashMap map) { 1060 System.out.println("Map entries are :"); 1061 Set entries = map.entrySet(); 1062 Iterator i = entries.iterator(); 1063 while (i.hasNext()) { 1064 Map.Entry m = (Map.Entry)i.next(); 1065 String name = (String)m.getKey(); 1066 String value = (String)m.getValue(); 1067 System.out.println(name+"="+value); 1068 } 1069 } 1070 1071 } 570 1072 571 1073
Note:
See TracChangeset
for help on using the changeset viewer.