| 168 | | if ("some".equals(searchParameters.getJournalOpt())) { // Option "all" does not modify the query. |
| 169 | | q.append(" AND ("); |
| 170 | | for (String eissn : searchParameters.getLimitToJournal()) { |
| 171 | | q.append(" eissn:").append(eissn).append(" OR"); |
| 172 | | } |
| 173 | | q.replace(q.length() - 3, q.length(), " ) "); // Remove last "AND". Add closing parenthesis. |
| 174 | | } |
| | 166 | // FIXME: For performance, this should be done with filters not by concatenating "AND" clause. |
| | 167 | addFilter(q, searchParameters.getJournalOpt(), searchParameters.getLimitToJournal(), " eissn:"); |
| 177 | | if ("some".equals(searchParameters.getSubjectCatOpt())) { // Option "all" does not modify the query. |
| 178 | | q.append(" AND ("); |
| 179 | | for (String category : searchParameters.getLimitToCategory()) { |
| 180 | | q.append(" subject:").append(category).append(" OR"); |
| 181 | | } |
| 182 | | q.replace(q.length() - 3, q.length(), " ) "); // Remove last "AND". Add closing parenthesis. |
| 183 | | } |
| | 170 | // FIXME: For performance, this should be done with filters not by concatenating "AND" clause. |
| | 171 | addFilter(q, searchParameters.getSubjectCatOpt(), searchParameters.getLimitToCategory(), " subject:"); |
| 191 | | /** |
| 192 | | * Form field description: "Where my words occur:" |
| 193 | | * |
| 194 | | * @param textSearchOption |
| 195 | | * @param searchString |
| 196 | | * @return |
| 197 | | */ |
| 198 | | private StringBuilder buildFieldAtLeastOneOfTheWords(String textSearchOption, String searchString) { |
| 199 | | StringBuilder sb = new StringBuilder(" ( "); |
| | 179 | private void addFilter(StringBuilder q, String option, String[] limits, String field) { |
| | 180 | if ("some".equals(option) && limits.length > 0) { // Option "all" does not modify the query. |
| | 181 | q.append(" AND ("); |
| | 182 | for (String limit : limits) { |
| | 183 | q.append(field).append(limit).append(" OR"); |
| | 184 | } |
| | 185 | q.replace(q.length() - 3, q.length(), " ) "); // Remove last "OR". Add closing parenthesis. |
| | 186 | } |
| | 187 | } |
| | 188 | |
| | 189 | private StringBuilder addFields(String operation, String textSearchOption, String searchString) { |
| | 190 | StringBuilder sb = new StringBuilder(); |
| 208 | | sb.append(token).append(" OR "); |
| 209 | | } |
| 210 | | } |
| 211 | | return sb.replace(sb.length() - 3, sb.length(), ") "); |
| 212 | | } |
| 213 | | |
| 214 | | private StringBuilder buildFieldAllTheWords(String textSearchOption, String searchString) { |
| 215 | | StringBuilder sb = new StringBuilder(" ( "); |
| 216 | | for(String token : searchString.split(" ")) { |
| 217 | | if ("abstract".equals(textSearchOption)) { |
| 218 | | sb.append("abstract:").append(token).append(" AND "); |
| 219 | | } else if ("refs".equals(textSearchOption)) { |
| 220 | | sb.append("citation:").append(token).append(" AND "); |
| 221 | | } else if ("title".equals(textSearchOption)) { |
| 222 | | sb.append("title:").append(token).append(" AND "); |
| 223 | | } else { |
| 224 | | sb.append(token).append(" AND "); |
| 225 | | } |
| 226 | | } |
| 227 | | return sb.replace(sb.length() - 4, sb.length(), ") "); |
| 228 | | } |
| 229 | | |
| 230 | | private StringBuilder buildFieldFromTokens(String tokenString, String booleanFunction) { |
| 231 | | StringBuilder sb = new StringBuilder(); |
| 232 | | for(String token : tokenString.split(" ")) { |
| 233 | | sb.append(token).append(" ").append(booleanFunction).append(" "); |
| 234 | | } |
| 235 | | return sb.replace(sb.length() - booleanFunction.length() - 1, sb.length(), ""); |
| | 206 | sb.append(token); |
| | 207 | } |
| | 208 | } |
| | 209 | |
| | 210 | if (sb.length() > 0) { |
| | 211 | sb.append(") "); |
| | 212 | } |
| | 213 | |
| | 214 | return sb; |