lucene-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ian Lea <ian....@gmail.com>
Subject Re: Boosting Search Results
Date Mon, 03 Aug 2009 10:28:18 GMT
Sorry, I'm not clear what you don't know how to do.


To spell out the double search suggestion a bit more:

QueryParser qp = new QueryParser(...)

Query q1 = qp.parse("+word1 +word2");
TopDocs td1 = searcher.search(q1, ...)

Query q2 = qp.parse("word1 word2");
TopDocs td2 = searcher.search(q2);

ScoreDoc[] sd1 = td1.scoreDocs;
ScoreDoc[] sd2 = td2.scoreDocs;

// Grab all docids from first search
List<Integer> docidl = new ArrayList<Integer>();
for (int i1 = 0; i1 < sd1.length; i1++) {
  docidl.add(sd1[i1].doc);
}

// Add any docids from second search that are not already on the list
for (int i2 = 0; i2 < sd2.length; i2++) {
  int docid = sd2[i2].doc);
  if (!docidl.contains(docid)) {
    docidl.add(docid);
  }
}

(code just a suggestion, off the top of my head, may not work, may be
full of bugs, there will be other maybe better ways to do it).

If that doesn't help, perhaps you could rephrase the question.


--
Ian.


On Mon, Aug 3, 2009 at 10:51 AM, bourne71<garylkc@live.com> wrote:
>
> Hey, thanks for the suggestion.
> I think of performing 2 searches as well. Unfortunately I dont know how to
> perform a search on the first results return. Could u guide me a little? I
> tried to look around for the information but found none
>
> Thanks
>
> Ian Lea wrote:
>>
>> You could write your own Similarity, extending DefaultSimilarity and
>> overriding whichever methods will help you achieve your aims.
>>
>> Or how about running 2 searches, the first with both words required
>> (+word1 +word2) and then a second search where they aren't both
>> required (word1 word2).  Then merge/dedup the two lists of hits,
>> keeping the ones from the first search at the top.
>>
>>
>> --
>> Ian.
>>
>> On Mon, Aug 3, 2009 at 4:14 AM, bourne71<garylkc@live.com> wrote:
>>>
>>> Thanks for all the reply. It help me to understand problem better, but is
>>> it
>>> possible to create a query that will give additional boost to the results
>>> if
>>> and only if both of the word is found inside the results. This will
>>> definitely make sure that the results will be in the higher up of the
>>> list.
>>>
>>> Can this type of query be created?
>>> --
>>> View this message in context:
>>> http://www.nabble.com/Boosting-Search-Results-tp24753954p24784708.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://www.nabble.com/Boosting-Search-Results-tp24753954p24788000.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


Mime
View raw message