You are viewing a plain text version of this content. The canonical link for it is here.
Posted to slide-user@jakarta.apache.org by Gbenga Bello <rg...@yahoo.com> on 2004/10/17 18:41:16 UTC
Searching in Slide - SearchQuery Object and Request Element issue
Hello List,
Quite some time
I am trying to do search in slide
First how best can I accomplish this?
What I am doing currently is to Create a Search Query and use the searchHelper class to carry out the search
However when I try to create the searchquery object, a BadqueryException is encountered; which is of this form
org.apache.slide.search.BadQueryException: Required element <from> not supplied
at org.apache.slide.search.basic.BasicQueryImpl.getScope(BasicQueryImpl.java:386)
at org.apache.slide.search.basic.BasicSearchLanguage.parseQuery(BasicSearchLanguage.java:127)
at org.apache.slide.search.SearchImpl.createSearchQuery(SearchImpl.java:256)
at org.apache.slide.search.SearchImpl.createSearchQuery(SearchImpl.java:199)
at org.apache.slide.search.SearchImpl.createSearchQuery(SearchImpl.java:175)
at com.onespace.webdav.SearchforDocument.ExecuteQuery(SearchforDocument.java:140)
at com.onespace.webdav.SearchforDocument.main(SearchforDocument.java:185)
I suspect that something is probably wrong with the way I am packaging the SearchRequest Element. Pls can you help point this out for me.
I will also appreciate links to discusions relevant to the error i am encountering, or probably a better approach to solving to doing search in slide.
Here is my code below.
I will be glad to hear from you today.
COGI
<><><>END<><><><>
package com.onespace.webdav;
/**
* <p>Title: DMS Search Engine </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2002</p>
* <p>Company:Creattion Nigeria Ltd. </p>
* @author COGI
* @version 1.0
*/
import java.io.*;
import java.util.*;
import javax.transaction.*;
import java.lang.SecurityException;
import java.security.Principal;
import junit.framework.TestCase;
import org.apache.slide.authenticate.*;
import org.apache.slide.common.*;
import org.apache.slide.content.*;
import org.apache.slide.lock.*;
import org.apache.slide.security.*;
import org.apache.slide.structure.*;
import org.apache.slide.search.*;
import org.apache.slide.store.impl.rdbms.JDBCStore;
import org.apache.slide.common.SlideException;
import org.apache.slide.webdav.util.WebdavUtils;
import org.apache.slide.webdav.util.resourcekind.*;
import org.apache.webdav.lib.methods.*;
import org.apache.slide.util.conf.ConfigurationException;
import org.apache.slide.common.NamespaceAccessToken;
import org.apache.slide.util.XMLValue;
import org.apache.slide.macro.Macro;
import org.apache.slide.macro.MacroParameters;
import org.apache.slide.macro.*;
import org.apache.slide.store.RevisionDescriptorsStore;
import org.jdom.Element;
import org.jdom.Namespace;
import org.jdom.output.XMLOutputter;
public class SearchforDocument extends TestCase{
file://Helper Classes
static private NamespaceAccessToken token;
private Structure structure;
private Security security;
private Lock lock;
private Content content;
private SlideToken slideToken;
file://Search
private Search search;
private Element element;
public SearchforDocument(String name) {
super(name);
try {
setUp();
}
catch (Exception ex) {
}
}
protected void setUp() throws Exception {
super.setUp();
// Initialization
String namespace = "jdbc_store";
Domain.init("E:/tmp/Slide 2.0b1 Tomcat 5.0/slide/Domain.xml");
this.token =
Domain.accessNamespace(new SecurityToken(
new String()),namespace);
this.structure = token.getStructureHelper();
this.security = token.getSecurityHelper();
this.lock = token.getLockHelper();
this.content = token.getContentHelper();
this.search = token.getSearchHelper();
}
/**
* @methodName CreateSearchRequest()
* @param resourceURI
* @return
* @throws IOException
*/
public Element CreateSearchRequest(String resourceURI) throws IOException {
Namespace davNamespace = Namespace.getNamespace ("d", "DAV:");
Element searchRequest = new Element ("searchRequest", davNamespace);
Element basicSearch = new Element ("basicSearch", davNamespace);
searchRequest.addContent (basicSearch);
Element select = new Element ("select", davNamespace);
basicSearch.addContent(select);
Element prop = new Element ("prop", davNamespace);
select.addContent(prop);
prop.addContent(new Element ("getcontentlength", davNamespace));
Element from = new Element ("from", davNamespace);
basicSearch.addContent(from);
Element scope = new Element ("scope", davNamespace);
from.addContent(scope);
Element href = new Element ("href", davNamespace);
href.addContent(resourceURI);
scope.addContent(href);
Element where = new Element ("where", davNamespace);
basicSearch.addContent(where);
Element gt = new Element ("gt", davNamespace);
where.addContent (gt);
Element p2 = new Element ("prop", davNamespace);
gt.addContent(p2);
p2.addContent(new Element ("getcontentlength", davNamespace));
Element literal = new Element ("literal", davNamespace);
literal.addContent("10000");
p2.addContent(literal);
XMLOutputter out = new XMLOutputter (" ", true);
out.output (searchRequest, System.out);
System.out.println("\n");
return searchRequest;
}
/**
*This mtd creates the SearchQuery object and call the search method of the SearchHelper class
* @methodName ExecuteQuery()
* @return SearchQueryResult
*/
public SearchQueryResult ExecuteQuery (){
CredentialsToken credentials = new CredentialsToken("root");
SlideToken slideToken = new SlideTokenImpl(credentials);
SearchLanguage []sLag = search.getSupportedLanguages();
for (int i=0;i<sLag.length;i++)
System.out.println("GrammarUri = "+ sLag[i].getGrammarUri());
try {
SearchQuery searchqry = search.createSearchQuery("DAV:",
CreateSearchRequest("/files/"),
slideToken, 1);
SearchQueryResult searchqryResult = doSearch(searchqry,slideToken);
return searchqryResult;
}
catch (IOException ex) {
ex.printStackTrace();
return null;
}
catch (BadQueryException ex) {
System.err.println("Bad Query!");
ex.printStackTrace();
return null;
}
}
/**
* @methodName doSearch()
* @param Squery
* @param slideToken
* @return SearchQueryResult
*/
public SearchQueryResult doSearch (SearchQuery Squery, SlideToken slideToken){
try {
return search.search(slideToken, Squery);
}
catch (ServiceAccessException ex) {
return null;
}
}
/**
* @methodName ListSearchResult();
* @param result
*/
public void ListSearchResult (SearchQueryResult result){
Iterator It = result.iterator();
while (It.hasNext()){
String Item = (String)It.next();
System.out.println(" "+Item);
}
}
public static void main(String[] args) throws IOException{
SearchforDocument searchforDocument1 = new SearchforDocument("xml");
searchforDocument1.ExecuteQuery();
}
}
---------------------------------
Do you Yahoo!?
Take Yahoo! Mail with you! Get it on your mobile phone.