You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@lucene.apache.org by syedfa <fa...@gmail.com> on 2009/12/23 02:04:14 UTC

Need help with XML Query Parser example in Lucene 3.0

Dear fellow Java developers:

I am trying to run the XML Query Parser example that comes with Lucene 3.0
source distribution.  I have the application structured identical to the one
you download, and I am trying to run it in eclipse.  When I launch the
application, fill out the form that appears on index.jsp, and then submit it
to search the index, I get the following error 505:

javax.servlet.ServletException: Error processing query

org.apache.lucene.xmlparser.webdemo.FormBasedXmlQueryDemo.doPost(FormBasedXmlQueryDemo.java:124)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


root cause 

java.lang.NullPointerException

org.apache.lucene.xmlparser.webdemo.FormBasedXmlQueryDemo.doPost(FormBasedXmlQueryDemo.java:107)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


I absolutely have no idea why this is happening, as I even structured the
package of the servlet in eclipse identical to the way it is in the example. 
I have attached my entire servlet, "FormBasedXmlQueryDemo" below:

public class FormBasedXmlQueryDemo extends HttpServlet {
	private static final long serialVersionUID = 1L;
    
	private QueryTemplateManager queryTemplateManager;
	private CorePlusExtensionsParser xmlParser;
	private IndexSearcher searcher;
	private Analyzer analyzer = new
StandardAnalyzer(org.apache.lucene.util.Version.LUCENE_CURRENT);
	
    public FormBasedXmlQueryDemo() {
        super();
        // TODO Auto-generated constructor stub
    }

    @Override
	public void init(ServletConfig config) throws ServletException {
		// TODO Auto-generated method stub
		super.init(config);
		
		try{
			
			openExampleIndex();
			
			String xslFile=config.getInitParameter("xslFile");
			String defaultStandardQueryParserField =
config.getInitParameter("defaultStandardQueryParserField");
			queryTemplateManager = new
QueryTemplateManager(getServletContext().getResourceAsStream("/WEB-INF/" +
xslFile));
			xmlParser = new CorePlusExtensionsParser(defaultStandardQueryParserField,
analyzer);
			
		}catch(Exception e){
			throw new ServletException("Error loading query template", e);
		}
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {

	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		
		Properties completedFormFields = new Properties();
		Enumeration pNames = request.getParameterNames();
		
		while (pNames.hasMoreElements()){
			
			String propName = (String) pNames.nextElement();
			String value = request.getParameter(propName);
			
			if ((value != null) && (value.trim().length()>0)){
				completedFormFields.setProperty(propName, value);
			}
		}
		
		try{
			org.w3c.dom.Document xmlQuery =
queryTemplateManager.getQueryAsDOM(completedFormFields);			
			Query query = xmlParser.getQuery(xmlQuery.getDocumentElement());
			TopDocs topDocs = searcher.search(query, 10);
			
			if (topDocs != null) {
				ScoreDoc[] sd = topDocs.scoreDocs;
				Document[] results = new Document[sd.length];
				
				for(int i = 0; i < results.length; i++){
					
					results[i] = searcher.doc(sd[i].doc);
					request.setAttribute("results", results);
				}
			}
			
			RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher("/index.jsp");
			dispatcher.forward(request, response);
		}
		catch(Exception e){
			throw new ServletException("Error processing query", e);
		}
	}
	
	private void openExampleIndex() throws CorruptIndexException, IOException {
		
		
		RAMDirectory rd = new RAMDirectory();
		IndexWriter writer = new IndexWriter(rd, analyzer,
IndexWriter.MaxFieldLength.LIMITED);
		InputStream dataIn =
getServletContext().getResourceAsStream("/WEB-INF/data.tsv");
		BufferedReader br = new BufferedReader(new InputStreamReader(dataIn));
		String line = br.readLine();
		
		while (line != null){
			
			line = line.trim();
			if (line.length() > 0){
				
				StringTokenizer st = new StringTokenizer(line, "\t");
				Document doc = new Document();
				doc.add(new Field("location",st.nextToken(),Field.Store.YES,
						Field.Index.ANALYZED_NO_NORMS));
				doc.add(new Field("salary",st.nextToken(),Field.Store.YES,
						Field.Index.ANALYZED_NO_NORMS));
				doc.add(new Field("type",st.nextToken(),Field.Store.YES,
						Field.Index.ANALYZED_NO_NORMS));
				doc.add(new Field("description",st.nextToken(),Field.Store.YES,
						Field.Index.ANALYZED));
				writer.addDocument(doc);
			}
			
			line = br.readLine();
		}
		
		writer.close();
	}

}



When I was tracing through the code, it appears that it was throwing the
exception just as it tried to process the line:

TopDocs topDocs = searcher.search(query, 10);

Does anyone know where I am going wrong?  

Thanks in advance to all who reply.
-- 
View this message in context: http://old.nabble.com/Need-help-with-XML-Query-Parser-example-in-Lucene-3.0-tp26896711p26896711.html
Sent from the Lucene - Java Users mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-user-help@lucene.apache.org


Re: Need help with XML Query Parser example in Lucene 3.0

Posted by syedfa <fa...@gmail.com>.
Ignore the previous message, I realized that I just needed to choose the
right combination to get a result!

Thanks again for your time and patience.
Take care.
Sincerely;
Fayyaz



syedfa wrote:
> 
> Thanks very much for your kind reply, and for pointing out my mistake.  I
> made the correction, (I can't believe I left that line out!)  This was a
> total oversight on my part.  Having said that, after making the change, I
> re-ran the application, but now I'm getting no results to appear.  I've
> tried entering "java" for the job description field, and I've tried
> entering "lucene" also, while arbitrarily choosing "permanent", and
> selecting the various locations (north, south, east, west).  Any reason
> why that would be?  I walked through the code, and found that in the
> following block:
> 
> TopDocs topDocs = searcher.search(query, 10);			
> 			if (topDocs != null) {
> 				ScoreDoc[] sd = topDocs.scoreDocs;
> 				Document[] results = new Document[sd.length];
> 				
> 				for(int i = 0; i < results.length; i++){
> 					
> 					results[i] = searcher.doc(sd[i].doc);
> 					request.setAttribute("results", results);
> 				}
> 			}
> 
> 
> In the above code block, when I create my TopDocs object, using the
> debugger in eclipse, I see that the value of totalHits is 0, and scoreDocs
> has a value of ScoreDoc[0].  Because of this, my Document[] results array
> is created with a zero index, and therefore nothing gets returned to the
> user.  I can't see why this is, since I'm using "java", "lucene", "HTML"
> as keywords in the search field.
> 
> Can you see where I'm going wrong?
> 
> Thanks again for your help.  I truly appreciate it.
> 
> Fayyaz
> 
> 
> markharw00d wrote:
>> 
>> Hi Fayyaz,
>> 
>>>>I have found an error in the web.xml file,
>> 
>> Good job!  I found an error in your code so that makes us even :)
>> 
>> It looks like you removed the line in the "openExampleIndex" method which
>> opens the searcher. 
>> That explains your null pointer.
>> 
>> The problem you found in the web.xml isn't actually an error but is
>> potentially misleading. In the "UserQuery" tag in the XSL there is a
>> "fieldName" tag which is set to "description". The "jobDescription"
>> default fieldname passed to the XML parser would only be in effect for
>> any <UserQuery> tags that didn't specify a fieldName..
>> 
>> BTW, in the source distribution there are full "DTDdocs" for the XML
>> syntax in contrib\xml-query-parser\docs
>> 
>> Cheers
>> Mark
>> 
>> 
>> ----- Original Message ----
>> From: syedfa <fa...@gmail.com>
>> To: java-user@lucene.apache.org
>> Sent: Wed, 23 December, 2009 5:03:00
>> Subject: Re: Need help with XML Query Parser example in Lucene 3.0
>> 
>> 
>> I have found an error in the web.xml file, however, this DID NOT fix the
>> problem.  Inside the web.xml file, there is the following snippet:
>> 
>> <init-param>
>>             <description>
>>             Default field used in standard Lucene QueryParser used in
>> UserQuery
>> tag</description>
>>             <param-name>defaultStandardQueryParserField</param-name>
>>             <param-value>jobDescription</param-value>
>> </init-param>
>> 
>> the <param-value> here should be IMHO "description", as neither the
>> query.xsl file, nor index.jsp file contain any tags/values called
>> "jobDescription", only "description".  I hope the contributors to the
>> Lucene
>> project take note of this, or please show me the error of my ways. 
>> Having
>> said that, as I mentioned earlier, despite making this correction, I am
>> still getting the above "NullPointerException".  Can anyone see where I
>> am
>> going wrong?
>> 
>> Thanks again to all who reply.
>> Sincerely;
>> Fayyaz
>> 
>> syedfa wrote:
>>> 
>>> Dear fellow Java developers:
>>> 
>>> I am trying to run the XML Query Parser example that comes with Lucene
>>> 3.0
>>> source distribution.  I have the application structured identical to the
>>> one you download, and I am trying to run it in eclipse.  When I launch
>>> the
>>> application, fill out the form that appears on index.jsp, and then
>>> submit
>>> it to search the index, I get the following error 505:
>>> 
>>> javax.servlet.ServletException: Error processing query
>>> 
>>> org.apache.lucene.xmlparser.webdemo.FormBasedXmlQueryDemo.doPost(FormBasedXmlQueryDemo.java:124)
>>>     javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
>>>     javax.servlet.http.HttpServlet..service(HttpServlet.java:803)
>>> 
>>> 
>>> root cause 
>>> 
>>> java.lang..NullPointerException
>>> 
>>> org.apache.lucene.xmlparser.webdemo.FormBasedXmlQueryDemo.doPost(FormBasedXmlQueryDemo.java:107)
>>>     javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
>>>     javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
>>> 
>>> 
>>> I absolutely have no idea why this is happening, as I even structured
>>> the
>>> package of the servlet in eclipse identical to the way it is in the
>>> example.  I have attached my entire servlet, "FormBasedXmlQueryDemo"
>>> below:
>>> 
>>> public class FormBasedXmlQueryDemo extends HttpServlet {
>>>     private static final long serialVersionUID = 1L;
>>>    
>>>     private QueryTemplateManager queryTemplateManager;
>>>     private CorePlusExtensionsParser xmlParser;
>>>     private IndexSearcher searcher;
>>>     private Analyzer analyzer = new
>>> StandardAnalyzer(org.apache.lucene.util.Version.LUCENE_CURRENT);
>>>     
>>>     public FormBasedXmlQueryDemo() {
>>>         super();
>>>         // TODO Auto-generated constructor stub
>>>     }
>>> 
>>>     @Override
>>>     public void init(ServletConfig config) throws ServletException {
>>>         // TODO Auto-generated method stub
>>>         super.init(config);
>>>         
>>>         try{
>>>             
>>>             openExampleIndex();
>>>             
>>>             String xslFile=config.getInitParameter("xslFile");
>>>             String defaultStandardQueryParserField =
>>> config.getInitParameter("defaultStandardQueryParserField");
>>>             queryTemplateManager = new
>>> QueryTemplateManager(getServletContext().getResourceAsStream("/WEB-INF/"
>>> +
>>> xslFile));
>>>             xmlParser = new
>>> CorePlusExtensionsParser(defaultStandardQueryParserField, analyzer);
>>>             
>>>         }catch(Exception e){
>>>             throw new ServletException("Error loading query template",
>>> e);
>>>         }
>>>     }
>>> 
>>>     protected void doGet(HttpServletRequest request, HttpServletResponse
>>> response) throws ServletException, IOException {
>>> 
>>>     }
>>> 
>>>     @Override
>>>     protected void doPost(HttpServletRequest request,
>>> HttpServletResponse
>>> response) throws ServletException, IOException {
>>>         // TODO Auto-generated method stub
>>>         
>>>         Properties completedFormFields = new Properties();
>>>         Enumeration pNames = request.getParameterNames();
>>>         
>>>         while (pNames.hasMoreElements()){
>>>             
>>>             String propName = (String) pNames.nextElement();
>>>             String value = request.getParameter(propName);
>>>             
>>>             if ((value != null) && (value.trim().length()>0)){
>>>                 completedFormFields.setProperty(propName, value);
>>>             }
>>>         }
>>>         
>>>         try{
>>>             org.w3c.dom..Document xmlQuery =
>>> queryTemplateManager.getQueryAsDOM(completedFormFields);            
>>>             Query query =
>>> xmlParser.getQuery(xmlQuery.getDocumentElement());
>>>             TopDocs topDocs = searcher.search(query, 10);
>>>             
>>>             if (topDocs != null) {
>>>                 ScoreDoc[] sd = topDocs.scoreDocs;
>>>                 Document[] results = new Document[sd.length];
>>>                 
>>>                 for(int i = 0; i < results.length; i++){
>>>                     
>>>                     results[i] = searcher.doc(sd[i].doc);
>>>                     request.setAttribute("results", results);
>>>                 }
>>>             }
>>>             
>>>             RequestDispatcher dispatcher =
>>> getServletContext().getRequestDispatcher("/index..jsp");
>>>             dispatcher.forward(request, response);
>>>         }
>>>         catch(Exception e){
>>>             throw new ServletException("Error processing query", e);
>>>         }
>>>     }
>>>     
>>>     private void openExampleIndex() throws CorruptIndexException,
>>> IOException
>>> {
>>>         
>>>         
>>>         RAMDirectory rd = new RAMDirectory();
>>>         IndexWriter writer = new IndexWriter(rd, analyzer,
>>> IndexWriter.MaxFieldLength.LIMITED);
>>>         InputStream dataIn =
>>> getServletContext().getResourceAsStream("/WEB-INF/data.tsv");
>>>         BufferedReader br = new BufferedReader(new
>>> InputStreamReader(dataIn));
>>>         String line = br.readLine();
>>>         
>>>         while (line != null){
>>>             
>>>             line = line.trim();
>>>             if (line.length() > 0){
>>>                 
>>>                 StringTokenizer st = new StringTokenizer(line, "\t");
>>>                 Document doc = new Document();
>>>                 doc.add(new
>>> Field("location",st.nextToken(),Field.Store.YES,
>>>                         Field.Index.ANALYZED_NO_NORMS));
>>>                 doc.add(new
>>> Field("salary",st.nextToken(),Field.Store.YES,
>>>                         Field.Index.ANALYZED_NO_NORMS));
>>>                 doc.add(new Field("type",st.nextToken(),Field.Store.YES,
>>>                         Field.Index.ANALYZED_NO_NORMS));
>>>                 doc.add(new
>>> Field("description",st.nextToken(),Field.Store.YES,
>>>                         Field.Index.ANALYZED));
>>>                 writer.addDocument(doc);
>>>             }
>>>             
>>>             line = br.readLine();
>>>         }
>>>         
>>>         writer.close();
>>>     }
>>> 
>>> }
>>> 
>>> 
>>> 
>>> When I was tracing through the code, it appears that it was throwing the
>>> exception just as it tried to process the line:
>>> 
>>> TopDocs topDocs = searcher.search(query, 10);
>>> 
>>> Does anyone know where I am going wrong?  
>>> 
>>> Thanks in advance to all who reply.
>>> 
>> 
>> -- 
>> View this message in context:
>> http://old.nabble.com/Need-help-with-XML-Query-Parser-example-in-Lucene-3.0-tp26896711p26897607.html
>> Sent from the Lucene - Java Users mailing list archive at Nabble.com.
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
>> For additional commands, e-mail: java-user-help@lucene.apache.org
>> 
>> 
>> 
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
>> For additional commands, e-mail: java-user-help@lucene.apache.org
>> 
>> 
>> 
> 
> 

-- 
View this message in context: http://old.nabble.com/Need-help-with-XML-Query-Parser-example-in-Lucene-3.0-tp26896711p26906400.html
Sent from the Lucene - Java Users mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-user-help@lucene.apache.org


Re: Need help with XML Query Parser example in Lucene 3.0

Posted by syedfa <fa...@gmail.com>.
Thanks very much for your kind reply, and for pointing out my mistake.  I
made the correction, (I can't believe I left that line out!)  This was a
total oversight on my part.  Having said that, after making the change, I
re-ran the application, but now I'm getting no results to appear.  I've
tried entering "java" for the job description field, and I've tried entering
"lucene" also, while arbitrarily choosing "permanent", and selecting the
various locations (north, south, east, west).  Any reason why that would be? 
I walked through the code, and found that in the following block:

TopDocs topDocs = searcher.search(query, 10);			
			if (topDocs != null) {
				ScoreDoc[] sd = topDocs.scoreDocs;
				Document[] results = new Document[sd.length];
				
				for(int i = 0; i < results.length; i++){
					
					results[i] = searcher.doc(sd[i].doc);
					request.setAttribute("results", results);
				}
			}


In the above code block, when I create my TopDocs object, using the debugger
in eclipse, I see that the value of totalHits is 0, and scoreDocs has a
value of ScoreDoc[0].  Because of this, my Document[] results array is
created with a zero index, and therefore nothing gets returned to the user. 
I can't see why this is, since I'm using "java", "lucene", "HTML" as
keywords in the search field.

Can you see where I'm going wrong?

Thanks again for your help.  I truly appreciate it.

Fayyaz


markharw00d wrote:
> 
> Hi Fayyaz,
> 
>>>I have found an error in the web.xml file,
> 
> Good job!  I found an error in your code so that makes us even :)
> 
> It looks like you removed the line in the "openExampleIndex" method which
> opens the searcher. 
> That explains your null pointer.
> 
> The problem you found in the web.xml isn't actually an error but is
> potentially misleading. In the "UserQuery" tag in the XSL there is a
> "fieldName" tag which is set to "description". The "jobDescription"
> default fieldname passed to the XML parser would only be in effect for any
> <UserQuery> tags that didn't specify a fieldName..
> 
> BTW, in the source distribution there are full "DTDdocs" for the XML
> syntax in contrib\xml-query-parser\docs
> 
> Cheers
> Mark
> 
> 
> ----- Original Message ----
> From: syedfa <fa...@gmail.com>
> To: java-user@lucene.apache.org
> Sent: Wed, 23 December, 2009 5:03:00
> Subject: Re: Need help with XML Query Parser example in Lucene 3.0
> 
> 
> I have found an error in the web.xml file, however, this DID NOT fix the
> problem.  Inside the web.xml file, there is the following snippet:
> 
> <init-param>
>             <description>
>             Default field used in standard Lucene QueryParser used in
> UserQuery
> tag</description>
>             <param-name>defaultStandardQueryParserField</param-name>
>             <param-value>jobDescription</param-value>
> </init-param>
> 
> the <param-value> here should be IMHO "description", as neither the
> query.xsl file, nor index.jsp file contain any tags/values called
> "jobDescription", only "description".  I hope the contributors to the
> Lucene
> project take note of this, or please show me the error of my ways.  Having
> said that, as I mentioned earlier, despite making this correction, I am
> still getting the above "NullPointerException".  Can anyone see where I am
> going wrong?
> 
> Thanks again to all who reply.
> Sincerely;
> Fayyaz
> 
> syedfa wrote:
>> 
>> Dear fellow Java developers:
>> 
>> I am trying to run the XML Query Parser example that comes with Lucene
>> 3.0
>> source distribution.  I have the application structured identical to the
>> one you download, and I am trying to run it in eclipse.  When I launch
>> the
>> application, fill out the form that appears on index.jsp, and then submit
>> it to search the index, I get the following error 505:
>> 
>> javax.servlet.ServletException: Error processing query
>> 
>> org.apache.lucene.xmlparser.webdemo.FormBasedXmlQueryDemo.doPost(FormBasedXmlQueryDemo.java:124)
>>     javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
>>     javax.servlet.http.HttpServlet..service(HttpServlet.java:803)
>> 
>> 
>> root cause 
>> 
>> java.lang..NullPointerException
>> 
>> org.apache.lucene.xmlparser.webdemo.FormBasedXmlQueryDemo.doPost(FormBasedXmlQueryDemo.java:107)
>>     javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
>>     javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
>> 
>> 
>> I absolutely have no idea why this is happening, as I even structured the
>> package of the servlet in eclipse identical to the way it is in the
>> example.  I have attached my entire servlet, "FormBasedXmlQueryDemo"
>> below:
>> 
>> public class FormBasedXmlQueryDemo extends HttpServlet {
>>     private static final long serialVersionUID = 1L;
>>    
>>     private QueryTemplateManager queryTemplateManager;
>>     private CorePlusExtensionsParser xmlParser;
>>     private IndexSearcher searcher;
>>     private Analyzer analyzer = new
>> StandardAnalyzer(org.apache.lucene.util.Version.LUCENE_CURRENT);
>>     
>>     public FormBasedXmlQueryDemo() {
>>         super();
>>         // TODO Auto-generated constructor stub
>>     }
>> 
>>     @Override
>>     public void init(ServletConfig config) throws ServletException {
>>         // TODO Auto-generated method stub
>>         super.init(config);
>>         
>>         try{
>>             
>>             openExampleIndex();
>>             
>>             String xslFile=config.getInitParameter("xslFile");
>>             String defaultStandardQueryParserField =
>> config.getInitParameter("defaultStandardQueryParserField");
>>             queryTemplateManager = new
>> QueryTemplateManager(getServletContext().getResourceAsStream("/WEB-INF/"
>> +
>> xslFile));
>>             xmlParser = new
>> CorePlusExtensionsParser(defaultStandardQueryParserField, analyzer);
>>             
>>         }catch(Exception e){
>>             throw new ServletException("Error loading query template",
>> e);
>>         }
>>     }
>> 
>>     protected void doGet(HttpServletRequest request, HttpServletResponse
>> response) throws ServletException, IOException {
>> 
>>     }
>> 
>>     @Override
>>     protected void doPost(HttpServletRequest request, HttpServletResponse
>> response) throws ServletException, IOException {
>>         // TODO Auto-generated method stub
>>         
>>         Properties completedFormFields = new Properties();
>>         Enumeration pNames = request.getParameterNames();
>>         
>>         while (pNames.hasMoreElements()){
>>             
>>             String propName = (String) pNames.nextElement();
>>             String value = request.getParameter(propName);
>>             
>>             if ((value != null) && (value.trim().length()>0)){
>>                 completedFormFields.setProperty(propName, value);
>>             }
>>         }
>>         
>>         try{
>>             org.w3c.dom..Document xmlQuery =
>> queryTemplateManager.getQueryAsDOM(completedFormFields);            
>>             Query query =
>> xmlParser.getQuery(xmlQuery.getDocumentElement());
>>             TopDocs topDocs = searcher.search(query, 10);
>>             
>>             if (topDocs != null) {
>>                 ScoreDoc[] sd = topDocs.scoreDocs;
>>                 Document[] results = new Document[sd.length];
>>                 
>>                 for(int i = 0; i < results.length; i++){
>>                     
>>                     results[i] = searcher.doc(sd[i].doc);
>>                     request.setAttribute("results", results);
>>                 }
>>             }
>>             
>>             RequestDispatcher dispatcher =
>> getServletContext().getRequestDispatcher("/index..jsp");
>>             dispatcher.forward(request, response);
>>         }
>>         catch(Exception e){
>>             throw new ServletException("Error processing query", e);
>>         }
>>     }
>>     
>>     private void openExampleIndex() throws CorruptIndexException,
>> IOException
>> {
>>         
>>         
>>         RAMDirectory rd = new RAMDirectory();
>>         IndexWriter writer = new IndexWriter(rd, analyzer,
>> IndexWriter.MaxFieldLength.LIMITED);
>>         InputStream dataIn =
>> getServletContext().getResourceAsStream("/WEB-INF/data.tsv");
>>         BufferedReader br = new BufferedReader(new
>> InputStreamReader(dataIn));
>>         String line = br.readLine();
>>         
>>         while (line != null){
>>             
>>             line = line.trim();
>>             if (line.length() > 0){
>>                 
>>                 StringTokenizer st = new StringTokenizer(line, "\t");
>>                 Document doc = new Document();
>>                 doc.add(new
>> Field("location",st.nextToken(),Field.Store.YES,
>>                         Field.Index.ANALYZED_NO_NORMS));
>>                 doc.add(new
>> Field("salary",st.nextToken(),Field.Store.YES,
>>                         Field.Index.ANALYZED_NO_NORMS));
>>                 doc.add(new Field("type",st.nextToken(),Field.Store.YES,
>>                         Field.Index.ANALYZED_NO_NORMS));
>>                 doc.add(new
>> Field("description",st.nextToken(),Field.Store.YES,
>>                         Field.Index.ANALYZED));
>>                 writer.addDocument(doc);
>>             }
>>             
>>             line = br.readLine();
>>         }
>>         
>>         writer.close();
>>     }
>> 
>> }
>> 
>> 
>> 
>> When I was tracing through the code, it appears that it was throwing the
>> exception just as it tried to process the line:
>> 
>> TopDocs topDocs = searcher.search(query, 10);
>> 
>> Does anyone know where I am going wrong?  
>> 
>> Thanks in advance to all who reply.
>> 
> 
> -- 
> View this message in context:
> http://old.nabble.com/Need-help-with-XML-Query-Parser-example-in-Lucene-3.0-tp26896711p26897607.html
> Sent from the Lucene - Java Users mailing list archive at Nabble.com.
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
> For additional commands, e-mail: java-user-help@lucene.apache.org
> 
> 
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
> For additional commands, e-mail: java-user-help@lucene.apache.org
> 
> 
> 

-- 
View this message in context: http://old.nabble.com/Need-help-with-XML-Query-Parser-example-in-Lucene-3.0-tp26896711p26906269.html
Sent from the Lucene - Java Users mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-user-help@lucene.apache.org


Re: Need help with XML Query Parser example in Lucene 3.0

Posted by mark harwood <ma...@yahoo.co.uk>.
Hi Fayyaz,

>>I have found an error in the web.xml file,

Good job!  I found an error in your code so that makes us even :)

It looks like you removed the line in the "openExampleIndex" method which opens the searcher. 
That explains your null pointer.

The problem you found in the web.xml isn't actually an error but is potentially misleading. In the "UserQuery" tag in the XSL there is a "fieldName" tag which is set to "description". The "jobDescription" default fieldname passed to the XML parser would only be in effect for any <UserQuery> tags that didn't specify a fieldName..

BTW, in the source distribution there are full "DTDdocs" for the XML syntax in contrib\xml-query-parser\docs

Cheers
Mark


----- Original Message ----
From: syedfa <fa...@gmail.com>
To: java-user@lucene.apache.org
Sent: Wed, 23 December, 2009 5:03:00
Subject: Re: Need help with XML Query Parser example in Lucene 3.0


I have found an error in the web.xml file, however, this DID NOT fix the
problem.  Inside the web.xml file, there is the following snippet:

<init-param>
            <description>
            Default field used in standard Lucene QueryParser used in UserQuery
tag</description>
            <param-name>defaultStandardQueryParserField</param-name>
            <param-value>jobDescription</param-value>
</init-param>

the <param-value> here should be IMHO "description", as neither the
query.xsl file, nor index.jsp file contain any tags/values called
"jobDescription", only "description".  I hope the contributors to the Lucene
project take note of this, or please show me the error of my ways.  Having
said that, as I mentioned earlier, despite making this correction, I am
still getting the above "NullPointerException".  Can anyone see where I am
going wrong?

Thanks again to all who reply.
Sincerely;
Fayyaz

syedfa wrote:
> 
> Dear fellow Java developers:
> 
> I am trying to run the XML Query Parser example that comes with Lucene 3.0
> source distribution.  I have the application structured identical to the
> one you download, and I am trying to run it in eclipse.  When I launch the
> application, fill out the form that appears on index.jsp, and then submit
> it to search the index, I get the following error 505:
> 
> javax.servlet.ServletException: Error processing query
> 
> org.apache.lucene.xmlparser.webdemo.FormBasedXmlQueryDemo.doPost(FormBasedXmlQueryDemo.java:124)
>     javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
>     javax.servlet.http.HttpServlet..service(HttpServlet.java:803)
> 
> 
> root cause 
> 
> java.lang..NullPointerException
> 
> org.apache.lucene.xmlparser.webdemo.FormBasedXmlQueryDemo.doPost(FormBasedXmlQueryDemo.java:107)
>     javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
>     javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
> 
> 
> I absolutely have no idea why this is happening, as I even structured the
> package of the servlet in eclipse identical to the way it is in the
> example.  I have attached my entire servlet, "FormBasedXmlQueryDemo"
> below:
> 
> public class FormBasedXmlQueryDemo extends HttpServlet {
>     private static final long serialVersionUID = 1L;
>    
>     private QueryTemplateManager queryTemplateManager;
>     private CorePlusExtensionsParser xmlParser;
>     private IndexSearcher searcher;
>     private Analyzer analyzer = new
> StandardAnalyzer(org.apache.lucene.util.Version.LUCENE_CURRENT);
>     
>     public FormBasedXmlQueryDemo() {
>         super();
>         // TODO Auto-generated constructor stub
>     }
> 
>     @Override
>     public void init(ServletConfig config) throws ServletException {
>         // TODO Auto-generated method stub
>         super.init(config);
>         
>         try{
>             
>             openExampleIndex();
>             
>             String xslFile=config.getInitParameter("xslFile");
>             String defaultStandardQueryParserField =
> config.getInitParameter("defaultStandardQueryParserField");
>             queryTemplateManager = new
> QueryTemplateManager(getServletContext().getResourceAsStream("/WEB-INF/" +
> xslFile));
>             xmlParser = new
> CorePlusExtensionsParser(defaultStandardQueryParserField, analyzer);
>             
>         }catch(Exception e){
>             throw new ServletException("Error loading query template", e);
>         }
>     }
> 
>     protected void doGet(HttpServletRequest request, HttpServletResponse
> response) throws ServletException, IOException {
> 
>     }
> 
>     @Override
>     protected void doPost(HttpServletRequest request, HttpServletResponse
> response) throws ServletException, IOException {
>         // TODO Auto-generated method stub
>         
>         Properties completedFormFields = new Properties();
>         Enumeration pNames = request.getParameterNames();
>         
>         while (pNames.hasMoreElements()){
>             
>             String propName = (String) pNames.nextElement();
>             String value = request.getParameter(propName);
>             
>             if ((value != null) && (value.trim().length()>0)){
>                 completedFormFields.setProperty(propName, value);
>             }
>         }
>         
>         try{
>             org.w3c.dom..Document xmlQuery =
> queryTemplateManager.getQueryAsDOM(completedFormFields);            
>             Query query = xmlParser.getQuery(xmlQuery.getDocumentElement());
>             TopDocs topDocs = searcher.search(query, 10);
>             
>             if (topDocs != null) {
>                 ScoreDoc[] sd = topDocs.scoreDocs;
>                 Document[] results = new Document[sd.length];
>                 
>                 for(int i = 0; i < results.length; i++){
>                     
>                     results[i] = searcher.doc(sd[i].doc);
>                     request.setAttribute("results", results);
>                 }
>             }
>             
>             RequestDispatcher dispatcher =
> getServletContext().getRequestDispatcher("/index..jsp");
>             dispatcher.forward(request, response);
>         }
>         catch(Exception e){
>             throw new ServletException("Error processing query", e);
>         }
>     }
>     
>     private void openExampleIndex() throws CorruptIndexException, IOException
> {
>         
>         
>         RAMDirectory rd = new RAMDirectory();
>         IndexWriter writer = new IndexWriter(rd, analyzer,
> IndexWriter.MaxFieldLength.LIMITED);
>         InputStream dataIn =
> getServletContext().getResourceAsStream("/WEB-INF/data.tsv");
>         BufferedReader br = new BufferedReader(new InputStreamReader(dataIn));
>         String line = br.readLine();
>         
>         while (line != null){
>             
>             line = line.trim();
>             if (line.length() > 0){
>                 
>                 StringTokenizer st = new StringTokenizer(line, "\t");
>                 Document doc = new Document();
>                 doc.add(new Field("location",st.nextToken(),Field.Store.YES,
>                         Field.Index.ANALYZED_NO_NORMS));
>                 doc.add(new Field("salary",st.nextToken(),Field.Store.YES,
>                         Field.Index.ANALYZED_NO_NORMS));
>                 doc.add(new Field("type",st.nextToken(),Field.Store.YES,
>                         Field.Index.ANALYZED_NO_NORMS));
>                 doc.add(new Field("description",st.nextToken(),Field.Store.YES,
>                         Field.Index.ANALYZED));
>                 writer.addDocument(doc);
>             }
>             
>             line = br.readLine();
>         }
>         
>         writer.close();
>     }
> 
> }
> 
> 
> 
> When I was tracing through the code, it appears that it was throwing the
> exception just as it tried to process the line:
> 
> TopDocs topDocs = searcher.search(query, 10);
> 
> Does anyone know where I am going wrong?  
> 
> Thanks in advance to all who reply.
> 

-- 
View this message in context: http://old.nabble.com/Need-help-with-XML-Query-Parser-example-in-Lucene-3.0-tp26896711p26897607.html
Sent from the Lucene - Java Users mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-user-help@lucene.apache.org


      


---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-user-help@lucene.apache.org


Re: Need help with XML Query Parser example in Lucene 3.0

Posted by syedfa <fa...@gmail.com>.
I have found an error in the web.xml file, however, this DID NOT fix the
problem.  Inside the web.xml file, there is the following snippet:

<init-param>
			<description>
			Default field used in standard Lucene QueryParser used in UserQuery
tag</description>
			<param-name>defaultStandardQueryParserField</param-name>
			<param-value>jobDescription</param-value>
</init-param>

the <param-value> here should be IMHO "description", as neither the
query.xsl file, nor index.jsp file contain any tags/values called
"jobDescription", only "description".  I hope the contributors to the Lucene
project take note of this, or please show me the error of my ways.  Having
said that, as I mentioned earlier, despite making this correction, I am
still getting the above "NullPointerException".  Can anyone see where I am
going wrong?

Thanks again to all who reply.
Sincerely;
Fayyaz

syedfa wrote:
> 
> Dear fellow Java developers:
> 
> I am trying to run the XML Query Parser example that comes with Lucene 3.0
> source distribution.  I have the application structured identical to the
> one you download, and I am trying to run it in eclipse.  When I launch the
> application, fill out the form that appears on index.jsp, and then submit
> it to search the index, I get the following error 505:
> 
> javax.servlet.ServletException: Error processing query
> 
> org.apache.lucene.xmlparser.webdemo.FormBasedXmlQueryDemo.doPost(FormBasedXmlQueryDemo.java:124)
> 	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
> 	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
> 
> 
> root cause 
> 
> java.lang.NullPointerException
> 
> org.apache.lucene.xmlparser.webdemo.FormBasedXmlQueryDemo.doPost(FormBasedXmlQueryDemo.java:107)
> 	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
> 	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
> 
> 
> I absolutely have no idea why this is happening, as I even structured the
> package of the servlet in eclipse identical to the way it is in the
> example.  I have attached my entire servlet, "FormBasedXmlQueryDemo"
> below:
> 
> public class FormBasedXmlQueryDemo extends HttpServlet {
> 	private static final long serialVersionUID = 1L;
>     
> 	private QueryTemplateManager queryTemplateManager;
> 	private CorePlusExtensionsParser xmlParser;
> 	private IndexSearcher searcher;
> 	private Analyzer analyzer = new
> StandardAnalyzer(org.apache.lucene.util.Version.LUCENE_CURRENT);
> 	
>     public FormBasedXmlQueryDemo() {
>         super();
>         // TODO Auto-generated constructor stub
>     }
> 
>     @Override
> 	public void init(ServletConfig config) throws ServletException {
> 		// TODO Auto-generated method stub
> 		super.init(config);
> 		
> 		try{
> 			
> 			openExampleIndex();
> 			
> 			String xslFile=config.getInitParameter("xslFile");
> 			String defaultStandardQueryParserField =
> config.getInitParameter("defaultStandardQueryParserField");
> 			queryTemplateManager = new
> QueryTemplateManager(getServletContext().getResourceAsStream("/WEB-INF/" +
> xslFile));
> 			xmlParser = new
> CorePlusExtensionsParser(defaultStandardQueryParserField, analyzer);
> 			
> 		}catch(Exception e){
> 			throw new ServletException("Error loading query template", e);
> 		}
> 	}
> 
> 	protected void doGet(HttpServletRequest request, HttpServletResponse
> response) throws ServletException, IOException {
> 
> 	}
> 
> 	@Override
> 	protected void doPost(HttpServletRequest request, HttpServletResponse
> response) throws ServletException, IOException {
> 		// TODO Auto-generated method stub
> 		
> 		Properties completedFormFields = new Properties();
> 		Enumeration pNames = request.getParameterNames();
> 		
> 		while (pNames.hasMoreElements()){
> 			
> 			String propName = (String) pNames.nextElement();
> 			String value = request.getParameter(propName);
> 			
> 			if ((value != null) && (value.trim().length()>0)){
> 				completedFormFields.setProperty(propName, value);
> 			}
> 		}
> 		
> 		try{
> 			org.w3c.dom.Document xmlQuery =
> queryTemplateManager.getQueryAsDOM(completedFormFields);			
> 			Query query = xmlParser.getQuery(xmlQuery.getDocumentElement());
> 			TopDocs topDocs = searcher.search(query, 10);
> 			
> 			if (topDocs != null) {
> 				ScoreDoc[] sd = topDocs.scoreDocs;
> 				Document[] results = new Document[sd.length];
> 				
> 				for(int i = 0; i < results.length; i++){
> 					
> 					results[i] = searcher.doc(sd[i].doc);
> 					request.setAttribute("results", results);
> 				}
> 			}
> 			
> 			RequestDispatcher dispatcher =
> getServletContext().getRequestDispatcher("/index.jsp");
> 			dispatcher.forward(request, response);
> 		}
> 		catch(Exception e){
> 			throw new ServletException("Error processing query", e);
> 		}
> 	}
> 	
> 	private void openExampleIndex() throws CorruptIndexException, IOException
> {
> 		
> 		
> 		RAMDirectory rd = new RAMDirectory();
> 		IndexWriter writer = new IndexWriter(rd, analyzer,
> IndexWriter.MaxFieldLength.LIMITED);
> 		InputStream dataIn =
> getServletContext().getResourceAsStream("/WEB-INF/data.tsv");
> 		BufferedReader br = new BufferedReader(new InputStreamReader(dataIn));
> 		String line = br.readLine();
> 		
> 		while (line != null){
> 			
> 			line = line.trim();
> 			if (line.length() > 0){
> 				
> 				StringTokenizer st = new StringTokenizer(line, "\t");
> 				Document doc = new Document();
> 				doc.add(new Field("location",st.nextToken(),Field.Store.YES,
> 						Field.Index.ANALYZED_NO_NORMS));
> 				doc.add(new Field("salary",st.nextToken(),Field.Store.YES,
> 						Field.Index.ANALYZED_NO_NORMS));
> 				doc.add(new Field("type",st.nextToken(),Field.Store.YES,
> 						Field.Index.ANALYZED_NO_NORMS));
> 				doc.add(new Field("description",st.nextToken(),Field.Store.YES,
> 						Field.Index.ANALYZED));
> 				writer.addDocument(doc);
> 			}
> 			
> 			line = br.readLine();
> 		}
> 		
> 		writer.close();
> 	}
> 
> }
> 
> 
> 
> When I was tracing through the code, it appears that it was throwing the
> exception just as it tried to process the line:
> 
> TopDocs topDocs = searcher.search(query, 10);
> 
> Does anyone know where I am going wrong?  
> 
> Thanks in advance to all who reply.
> 

-- 
View this message in context: http://old.nabble.com/Need-help-with-XML-Query-Parser-example-in-Lucene-3.0-tp26896711p26897607.html
Sent from the Lucene - Java Users mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-user-help@lucene.apache.org