use of org.olat.search.QueryException in project OpenOLAT by OpenOLAT.
the class FileDocumentFactory method getDocumentFromCurrentIndex.
private Document getDocumentFromCurrentIndex(SearchResourceContext leafResourceContext, VFSLeaf leaf) {
try {
String resourceUrl = leafResourceContext.getResourceUrl();
SearchService searchService = CoreSpringFactory.getImpl(SearchServiceImpl.class);
Document indexedDoc = searchService.doSearch(resourceUrl);
if (indexedDoc != null) {
String timestamp = indexedDoc.get(AbstractOlatDocument.TIME_STAMP_NAME);
if (timestamp != null) {
Date indexLastModification = DateTools.stringToDate(timestamp);
Date docLastModificationDate = new Date(leaf.getLastModified());
if (leaf instanceof MetaTagged) {
MetaInfo metaInfo = ((MetaTagged) leaf).getMetaInfo();
Date metaDate = metaInfo.getMetaLastModified();
if (metaDate != null && metaDate.after(docLastModificationDate)) {
docLastModificationDate = metaDate;
}
}
if (docLastModificationDate.compareTo(indexLastModification) < 0) {
OlatDocument olatDoc = new OlatDocument(indexedDoc);
return olatDoc.getLuceneDocument();
}
}
}
} catch (ServiceNotAvailableException | ParseException | QueryException | java.text.ParseException e) {
log.error("", e);
}
return null;
}
use of org.olat.search.QueryException in project openolat by klemens.
the class SearchClientProxy method doSearch.
/**
* Uses Request/reply mechanism for synchronous operation.
* @see org.olat.search.service.searcher.OLATSearcher#doSearch(java.lang.String, org.olat.core.id.Identity, org.olat.core.id.Roles, boolean)
*/
@Override
public SearchResults doSearch(String queryString, List<String> condQueries, Identity identity, Roles roles, int firstResult, int maxResults, boolean doHighlighting) throws ServiceNotAvailableException, ParseException, QueryException {
boolean isDebug = log.isDebug();
if (isDebug) {
log.debug("STARTqueryString=" + queryString);
}
SearchRequest searchRequest = new SearchRequest(queryString, condQueries, identity.getKey(), roles, firstResult, maxResults, doHighlighting);
Session session = null;
try {
session = acquireSession();
if (isDebug) {
log.debug("doSearch session=" + session);
}
Message requestMessage = session.createObjectMessage(searchRequest);
Message returnedMessage = doSearchRequest(session, requestMessage);
queryCount_++;
if (returnedMessage != null) {
String responseStatus = returnedMessage.getStringProperty(JMS_RESPONSE_STATUS_PROPERTY_NAME);
if (responseStatus.equalsIgnoreCase(JMS_RESPONSE_STATUS_OK)) {
SearchResults searchResult = (SearchResults) ((ObjectMessage) returnedMessage).getObject();
if (isDebug) {
log.debug("ENDqueryString=" + queryString);
}
return searchResult;
} else if (responseStatus.equalsIgnoreCase(JMS_RESPONSE_STATUS_PARSE_EXCEPTION)) {
throw new ParseException("can not parse query=" + queryString);
} else if (responseStatus.equalsIgnoreCase(JMS_RESPONSE_STATUS_QUERY_EXCEPTION)) {
throw new QueryException("invalid query=" + queryString);
} else if (responseStatus.equalsIgnoreCase(JMS_RESPONSE_STATUS_SERVICE_NOT_AVAILABLE_EXCEPTION)) {
throw new ServiceNotAvailableException("Remote search service not available" + queryString);
} else {
log.warn("doSearch: receive unkown responseStatus=" + responseStatus);
return null;
}
} else {
// null returnedMessage
throw new ServiceNotAvailableException("communication error with JMS - cannot receive messages!!!");
}
} catch (JMSException e) {
log.error("Search failure I", e);
throw new ServiceNotAvailableException("communication error with JMS - cannot send messages!!!");
} finally {
releaseSession(session);
}
}
use of org.olat.search.QueryException in project openolat by klemens.
the class SearchInputController method doSearch.
protected SearchResults doSearch(UserRequest ureq, String searchString, List<String> condSearchStrings, String parentCtxt, String docType, String rsrcUrl, int firstResult, int maxReturns, boolean doSpellCheck) {
String query = null;
List<String> condQueries = null;
try {
if (doSpellCheck) {
// remove first old "did you mean words"
hideDidYouMeanWords();
}
query = getQueryString(searchString, false);
condQueries = getCondQueryStrings(condSearchStrings, parentCtxt, docType, rsrcUrl);
SearchResults searchResults = searchClient.doSearch(query, condQueries, ureq.getIdentity(), ureq.getUserSession().getRoles(), firstResult, maxReturns, true);
if (firstResult == 0 && searchResults.size() == 0 && StringHelper.containsNonWhitespace(query) && !query.endsWith(FUZZY_SEARCH)) {
// result-list was empty => first try to find word via spell-checker
if (doSpellCheck) {
Set<String> didYouMeansWords = searchClient.spellCheck(searchString);
if (didYouMeansWords != null && !didYouMeansWords.isEmpty()) {
setDidYouMeanWords(didYouMeansWords);
} else {
searchResults = doFuzzySearch(ureq, searchString, null, parentCtxt, docType, rsrcUrl, firstResult, maxReturns);
}
} else {
searchResults = doFuzzySearch(ureq, searchString, null, parentCtxt, docType, rsrcUrl, firstResult, maxReturns);
}
}
if (firstResult == 0 && searchResults.getList().isEmpty()) {
showInfo("found.no.result.try.fuzzy.search");
}
return searchResults;
} catch (ParseException e) {
if (log.isDebug())
log.debug("Query cannot be parsed: " + query);
getWindowControl().setWarning(translate("invalid.search.query"));
} catch (QueryException e) {
getWindowControl().setWarning(translate("invalid.search.query.with.wildcard"));
} catch (ServiceNotAvailableException e) {
getWindowControl().setWarning(translate("search.service.not.available"));
} catch (Exception e) {
log.error("Unexpected exception while searching", e);
getWindowControl().setWarning(translate("search.service.unexpected.error"));
}
return SearchResults.EMPTY_SEARCH_RESULTS;
}
use of org.olat.search.QueryException in project OpenOLAT by OpenOLAT.
the class SearchInputController method doSearch.
protected SearchResults doSearch(UserRequest ureq, String searchString, List<String> condSearchStrings, String parentCtxt, String docType, String rsrcUrl, int firstResult, int maxReturns, boolean doSpellCheck) {
String query = null;
List<String> condQueries = null;
try {
if (doSpellCheck) {
// remove first old "did you mean words"
hideDidYouMeanWords();
}
query = getQueryString(searchString, false);
condQueries = getCondQueryStrings(condSearchStrings, parentCtxt, docType, rsrcUrl);
SearchResults searchResults = searchClient.doSearch(query, condQueries, ureq.getIdentity(), ureq.getUserSession().getRoles(), firstResult, maxReturns, true);
if (firstResult == 0 && searchResults.size() == 0 && StringHelper.containsNonWhitespace(query) && !query.endsWith(FUZZY_SEARCH)) {
// result-list was empty => first try to find word via spell-checker
if (doSpellCheck) {
Set<String> didYouMeansWords = searchClient.spellCheck(searchString);
if (didYouMeansWords != null && !didYouMeansWords.isEmpty()) {
setDidYouMeanWords(didYouMeansWords);
} else {
searchResults = doFuzzySearch(ureq, searchString, null, parentCtxt, docType, rsrcUrl, firstResult, maxReturns);
}
} else {
searchResults = doFuzzySearch(ureq, searchString, null, parentCtxt, docType, rsrcUrl, firstResult, maxReturns);
}
}
if (firstResult == 0 && searchResults.getList().isEmpty()) {
showInfo("found.no.result.try.fuzzy.search");
}
return searchResults;
} catch (ParseException e) {
if (log.isDebug())
log.debug("Query cannot be parsed: " + query);
getWindowControl().setWarning(translate("invalid.search.query"));
} catch (QueryException e) {
getWindowControl().setWarning(translate("invalid.search.query.with.wildcard"));
} catch (ServiceNotAvailableException e) {
getWindowControl().setWarning(translate("search.service.not.available"));
} catch (Exception e) {
log.error("Unexpected exception while searching", e);
getWindowControl().setWarning(translate("search.service.unexpected.error"));
}
return SearchResults.EMPTY_SEARCH_RESULTS;
}
use of org.olat.search.QueryException in project OpenOLAT by OpenOLAT.
the class SearchClientProxy method doSearch.
/**
* Uses Request/reply mechanism for synchronous operation.
* @see org.olat.search.service.searcher.OLATSearcher#doSearch(java.lang.String, org.olat.core.id.Identity, org.olat.core.id.Roles, boolean)
*/
@Override
public SearchResults doSearch(String queryString, List<String> condQueries, Identity identity, Roles roles, int firstResult, int maxResults, boolean doHighlighting) throws ServiceNotAvailableException, ParseException, QueryException {
boolean isDebug = log.isDebug();
if (isDebug) {
log.debug("STARTqueryString=" + queryString);
}
SearchRequest searchRequest = new SearchRequest(queryString, condQueries, identity.getKey(), roles, firstResult, maxResults, doHighlighting);
Session session = null;
try {
session = acquireSession();
if (isDebug) {
log.debug("doSearch session=" + session);
}
Message requestMessage = session.createObjectMessage(searchRequest);
Message returnedMessage = doSearchRequest(session, requestMessage);
queryCount_++;
if (returnedMessage != null) {
String responseStatus = returnedMessage.getStringProperty(JMS_RESPONSE_STATUS_PROPERTY_NAME);
if (responseStatus.equalsIgnoreCase(JMS_RESPONSE_STATUS_OK)) {
SearchResults searchResult = (SearchResults) ((ObjectMessage) returnedMessage).getObject();
if (isDebug) {
log.debug("ENDqueryString=" + queryString);
}
return searchResult;
} else if (responseStatus.equalsIgnoreCase(JMS_RESPONSE_STATUS_PARSE_EXCEPTION)) {
throw new ParseException("can not parse query=" + queryString);
} else if (responseStatus.equalsIgnoreCase(JMS_RESPONSE_STATUS_QUERY_EXCEPTION)) {
throw new QueryException("invalid query=" + queryString);
} else if (responseStatus.equalsIgnoreCase(JMS_RESPONSE_STATUS_SERVICE_NOT_AVAILABLE_EXCEPTION)) {
throw new ServiceNotAvailableException("Remote search service not available" + queryString);
} else {
log.warn("doSearch: receive unkown responseStatus=" + responseStatus);
return null;
}
} else {
// null returnedMessage
throw new ServiceNotAvailableException("communication error with JMS - cannot receive messages!!!");
}
} catch (JMSException e) {
log.error("Search failure I", e);
throw new ServiceNotAvailableException("communication error with JMS - cannot send messages!!!");
} finally {
releaseSession(session);
}
}
Aggregations