FAQ
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

Search Discussions

  • Syedfa at Dec 23, 2009 at 5:03 am
    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
  • Mark harwood at Dec 23, 2009 at 10:00 am
    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 <fayyazuddin@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
  • Syedfa at Dec 23, 2009 at 7:23 pm
    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 <fayyazuddin@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
  • Syedfa at Dec 23, 2009 at 7:34 pm
    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 <fayyazuddin@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

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupjava-user @
categorieslucene
postedDec 23, '09 at 1:04a
activeDec 23, '09 at 7:34p
posts5
users2
websitelucene.apache.org

2 users in discussion

Syedfa: 4 posts Mark harwood: 1 post

People

Translate

site design / logo © 2022 Grokbase