| 345 | | } |
| | 352 | |
| | 353 | // TODO: implement spell-checking in a meaningful manner. This loop exists only to generate log output. |
| | 354 | // TODO: Add "spellcheckAlternatives" or something like it to the SearchHits class so it can be displayed to the user like Google's "did you mean..." |
| | 355 | // TODO: Turn off spellchecking for the "author" field. |
| | 356 | // Map<String, List<String>> spellcheckAlternatives = new LinkedHashMap<String, List<String>>(); |
| | 357 | // spellcheckAlternatives.put(token, queryResponse.getSpellCheckResponse().getSuggestionMap().get(token).getAlternatives()); |
| | 358 | if (queryResponse != null && queryResponse.getSpellCheckResponse() != null |
| | 359 | && queryResponse.getSpellCheckResponse().getSuggestionMap() != null |
| | 360 | && queryResponse.getSpellCheckResponse().getSuggestionMap().keySet().size() > 0) { |
| | 361 | StringBuilder sb = new StringBuilder("Spellcheck alternative suggestions:"); |
| | 362 | for (String token : queryResponse.getSpellCheckResponse().getSuggestionMap().keySet()) { |
| | 363 | sb.append(" { ").append(token).append(" : "); |
| | 364 | if (queryResponse.getSpellCheckResponse().getSuggestionMap().get(token).getAlternatives().size() < 1) { |
| | 365 | sb.append("NO ALTERNATIVES"); |
| | 366 | } else { |
| | 367 | for ( String alternative : queryResponse.getSpellCheckResponse().getSuggestionMap().get(token).getAlternatives()) { |
| | 368 | sb.append(alternative).append(", "); |
| | 369 | } |
| | 370 | sb.replace(sb.length() - 2, sb.length(), ""); // Remove last comma and space. |
| | 371 | } |
| | 372 | sb.append(" } ,"); |
| | 373 | } |
| | 374 | log.info(sb.replace(sb.length() - 2, sb.length(), "").toString()); // Remove last comma and space. |
| | 375 | } else { |
| | 376 | log.info("Solr thinks everything in the query is spelled correctly."); |
| | 377 | } |
| | 378 | |
| | 379 | // TODO: Implement faceting |
| | 380 | // TODO: Turn on these facet debug statements and reformat them in a more condensed and readable format. |
| | 381 | // if (queryResponse.getFacetFields().size() > 0) { |
| | 382 | // for (FacetField facetField : queryResponse.getFacetFields()) { |
| | 383 | // log.info(" ### facetField.getName() = " + facetField.getName() + " ::: facetField.getValueCount() = " + facetField.getValueCount()); |
| | 384 | // for (FacetField.Count count : facetField.getValues()) { |
| | 385 | // log.info(" %%% count.getName() = " + count.getName() + " ::: count.getCount() = " + count.getCount() |
| | 386 | // + " ::: count.getAsFilterQuery() = " + count.getAsFilterQuery()); |
| | 387 | // } |
| | 388 | // } |
| | 389 | // } else { |
| | 390 | // log.info(" ### There is no facet information for this query."); |
| | 391 | // } |
| | 392 | } // end if (log.isInfoEnabled()). |
| 348 | | |
| 349 | | // TODO: implement spell-checking in a menaingful manner. This loop exists only to generate log output. |
| 350 | | // TODO: Add "spellcheckAlternatives" or something like it to the SearchHits class so it can be displayed to the user like Google's "did you mean..." |
| 351 | | // TODO: Turn off spellchecking for the "author" field. |
| 352 | | // Map<String, List<String>> spellcheckAlternatives = new LinkedHashMap<String, List<String>>(); |
| 353 | | // spellcheckAlternatives.put(token, queryResponse.getSpellCheckResponse().getSuggestionMap().get(token).getAlternatives()); |
| 354 | | if (log.isInfoEnabled() && queryResponse.getSpellCheckResponse().getSuggestionMap().keySet().size() > 0) { |
| 355 | | StringBuilder sb = new StringBuilder("Spellcheck alternative suggestions:"); |
| 356 | | for (String token : queryResponse.getSpellCheckResponse().getSuggestionMap().keySet()) { |
| 357 | | sb.append(" { ").append(token).append(" : "); |
| 358 | | if (queryResponse.getSpellCheckResponse().getSuggestionMap().get(token).getAlternatives().size() < 1) { |
| 359 | | sb.append("NO ALTERNATIVES"); |
| 360 | | } else { |
| 361 | | for ( String alternative : queryResponse.getSpellCheckResponse().getSuggestionMap().get(token).getAlternatives()) { |
| 362 | | sb.append(alternative).append(", "); |
| 363 | | } |
| 364 | | sb.replace(sb.length() - 2, sb.length(), ""); // Remove last comma and space. |
| 365 | | } |
| 366 | | sb.append(" } ,"); |
| 367 | | } |
| 368 | | log.info(sb.replace(sb.length() - 2, sb.length(), "").toString()); // Remove last comma and space. |
| 369 | | } |
| | 485 | |
| | 486 | /** |
| | 487 | * Remove dangerous and unwanted values from the Strings in selected fields in the SearchParameters parameter. |
| | 488 | * |
| | 489 | * @param sp A SearchParameters object the needs to have some of its fields "cleaned" |
| | 490 | * @return The SearchParameters parameter with some of its fields "cleaned" |
| | 491 | */ |
| | 492 | private SearchParameters cleanStrings(SearchParameters sp) { |
| | 493 | sp.setQuery(sp.getQuery().replaceAll(" AND", "").replaceAll(" OR", "").replaceAll("AND ", "").replaceAll("OR ", "")); |
| | 494 | sp.setTextSearchAll(sp.getTextSearchAll().replaceAll(" AND", "").replaceAll(" OR", "").replaceAll("AND ", "").replaceAll("OR ", "")); |
| | 495 | sp.setTextSearchAtLeastOne(sp.getTextSearchAtLeastOne().replaceAll(" AND", "").replaceAll(" OR", "").replaceAll("AND ", "").replaceAll("OR ", "")); |
| | 496 | sp.setTextSearchExactPhrase(sp.getTextSearchExactPhrase().replaceAll(" AND", "").replaceAll(" OR", "").replaceAll("AND ", "").replaceAll("OR ", "")); |
| | 497 | sp.setTextSearchWithout(sp.getTextSearchWithout().replaceAll(" AND", "").replaceAll(" OR", "").replaceAll("AND ", "").replaceAll("OR ", "")); |
| | 498 | return sp; |
| | 499 | } |