Been testing a bit more. The Lucene index I'm working against is created
using java Lucene 2.0 and not Lucene.Net, I've also written a small test
class to see if the error was reproduced outside my application, and it was,
it only returns a single hit from the index (That is, the hit.Length()
method says 1). I've tested the same index with Luke 0.7 and Luke returns
453 hits.

Here's my test code:

protected void Page_Load(object sender, EventArgs e)
   {
       IndexSearcher isearch = new IndexSearcher("c:\\work\\indices\\fk");
       if (Request["search"] != null && !Request["search"].Equals(""))
       {
           string query = Request["search"];
           QueryParser qp = new QueryParser("contents", new
StandardAnalyzer());
           Query qObject = qp.Parse(query);
           Hits hits = isearch.Search(qObject);
           for(int i = 0; i<hits.Length(); i++)
           {
               Document doc = hits.Doc(i);
               Response.Write("Hit id: " +doc.Get("ID"));
               Response.Write("<br/>Title: " + doc.Get("title"));

               Response.Write("<br/>Score: " +hits.Score(i));
           }
       }

   }

Any idea why Luke returns the correct number of hits while my code only
returns 1 hit?

Appreciate any help.



After a rebuild of the code a search for para* yields 453 hits, 9 of which
are excluded by some later logic matching URIs from the index to guarantee
uniqueness of results. If I then immediately after fire another search for
para* it yields exactly 1 hit. This also happens if I've done another search
against the index and then try para* . At first I was sure it was my own
exclusion code that was removing too much, but after lots of logging and
debugging it turns out the Lucene Hits object only contains 1 hit after the
crucial IndexSearcher.search(query, ....) call. I'm at a loss as to why
this happens. Can't seem to recreate the issue with any other search. But I
can recreate the issue when moving the code from one server to another.

Here's the relevant code (queryField gets set from a different method
depending on which index we're searching against):

StandardAnalyzer analyzer = new StandardAnalyzer();

QueryParser qp = new QueryParser(queryField, analyzer);
            Query query;
            int totalHits = 0;//Total hits
            StringBuilder sb = new StringBuilder();
            int docHits = 0;
             Boolean scoreFound = false
                try
                {
                  //If there's a space in our search we want to enclose it
with  ""
                   if (search.Contains(" "))
                    {
                        sb.Append("\"");
                        sb.Append(search);
                        sb.Append ("\"");
                    }
                    else
                    {
                        sb.Append(search);
                    }
                    if (log.IsDebugEnabled)
                    {
                        log.Debug("Search: " + sb.ToString()); //Returns
para*
                    }
                    query = qp.Parse(sb.ToString());
                    if ( log.IsDebugEnabled)
                    {
                        log.Debug("Search made against index: " +
query.ToString()); //Returns contents:para*
                    }
                    string weightToSetBoost = tRow.weight;
                    double weightOfToken = double.Parse(weightToSetBoost,
allowDecimal);

                    query.SetBoost((float) weightOfToken);

                    Hits hits = isearch.Search(query); //isearch is the
IndexSearcher
                    if (log.IsDebugEnabled)
                    {
                        log.Debug("COUNTING HITS: " + hits.Length());
//Returns 454 the first time, then 1 any other time for the query para*
                    }
                    TreatHits(searchResult, maxHits, hits, originalToken,
indexShort);
//The TreatHits() method is where I thought the error was occurring,
//but since the hit count is 1 as early as the Lucene Hits object, I'm
stumped


I've also tried this with the 003 build and the same happens then.

Let me know if any more information/code is needed.
Anyone run into something similar and willing to share their
experience/solution?





--
Regards,
Christopher Kolstad
E-mail: [EMAIL PROTECTED] (University)
[EMAIL PROTECTED] (Home)
[EMAIL PROTECTED] (Job)

Reply via email to