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 David Miranda <da...@gmail.com> on 2013/08/06 16:19:06 UTC

Searching within a Search Result

Hi,

I have a Lucene index that has the fields label and abstract.

I want to do is first do a search by label field, for this i use:

TopScoreDocCollector collector = TopScoreDocCollector.create(MAX_HITS, true
> );
> searcher.search(q, collector);
> ScoreDoc[] hits = collector.topDocs().scoreDocs;


After the results of the first survey, I want to do a search in the
abstract field only in results obtained from the first survey.

How i do this?
Thanks in advance.

David

Re: Searching within a Search Result

Posted by David Miranda <da...@gmail.com>.
Still can not implement this feature. Previously to perform a search in the
'label', I used the following code that worked:

Query q = new QueryParser(Version.LUCENE_43, "label", analyzer
> ).parse(label);
> searcher.search(q, collector);
> ScoreDoc[] hits = collector.topDocs().scoreDocs;

But with BooleanQuery does not work. What I want is the result of those
TopDocs, do the search but in the 'abstract' to filter. Has anyone
implemented something similar?


2013/8/7 Ian Lea <ia...@gmail.com>

> Your BooleanQuery code looks fine.  Do the label and abstract searches
> work independently?  Are there docs that match both searches? There
> are tips on non-working searches in the FAQ at
>
> http://wiki.apache.org/lucene-java/LuceneFAQ#Why_am_I_getting_no_hits_.2F_incorrect_hits.3F
>
> If that doesn't help I suggest you post the smallest possible
> self-contained example that shows the problem.
>
>
> --
> Ian.
>
>
> On Tue, Aug 6, 2013 at 9:55 PM, David Miranda <da...@gmail.com>
> wrote:
> > I experimented with the previous code, but no results are returned from
> the
> > index. Someone can give me an example? I have been for some time trying
> to
> > implement this functionality.
> >
> > Thanks.
> >
> > 2013/8/6 David Miranda <da...@gmail.com>
> >
> >> Do this with the BooleanQuery:
> >>
> >>> Query q1 = new QueryParser(Version.LUCENE_43, "label", analyzer
> >>> ).parse(label);
> >>> Query q2 = new QueryParser(Version.LUCENE_43, "abstract", analyzer
> >>> ).parse(abstract);
> >>> BooleanQuery bq = new BooleanQuery();
> >>> booleanQuery.add(q1,BooleanClause.Occur.MUST);
> >>> booleanQuery.add(q2,BooleanClause.Occur.MUST);
> >>> Hits hits = indexSearcher.search(booleanQuery);
> >>
> >>
> >> This is right for what I want to do?
> >>
> >> Thanks.
> >>
> >> 2013/8/6 Ian Lea <ia...@gmail.com>
> >>
> >> The standard way is to combine the searches by label and abstract into
> >>> one query.  If using QueryParser a simple example would look something
> >>> like label:aaa abstract:bbb abstract:ccc.  You can get the same
> >>> effect, with more flexibility, by building a BooleanQuery in code.
> >>>
> >>> Also consider using a Filter e.g. QueryWrapperFilter on a query for
> >>> label:aaa with the query generated by QueryParser or direct
> >>> construction of a TermQuery.  See also CachingWrapperFilter if the
> >>> index isn't constantly changing.
> >>>
> >>>
> >>> --
> >>> Ian.
> >>>
> >>>
> >>> On Tue, Aug 6, 2013 at 3:19 PM, David Miranda <
> david.b.miranda@gmail.com>
> >>> wrote:
> >>> > Hi,
> >>> >
> >>> > I have a Lucene index that has the fields label and abstract.
> >>> >
> >>> > I want to do is first do a search by label field, for this i use:
> >>> >
> >>> > TopScoreDocCollector collector =
> TopScoreDocCollector.create(MAX_HITS,
> >>> true
> >>> >> );
> >>> >> searcher.search(q, collector);
> >>> >> ScoreDoc[] hits = collector.topDocs().scoreDocs;
> >>> >
> >>> >
> >>> > After the results of the first survey, I want to do a search in the
> >>> > abstract field only in results obtained from the first survey.
> >>> >
> >>> > How i do this?
> >>> > Thanks in advance.
> >>> >
> >>> > David
> >>>
> >>> ---------------------------------------------------------------------
> >>> To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
> >>> For additional commands, e-mail: java-user-help@lucene.apache.org
> >>>
> >>>
> >>
> >>
> >> --
> >> Cumprimentos,
> >> David Miranda
> >>
> >
> >
> >
> > --
> > Cumprimentos,
> > David Miranda
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
> For additional commands, e-mail: java-user-help@lucene.apache.org
>
>


-- 
Cumprimentos,
David Miranda

Re: Searching within a Search Result

Posted by Ian Lea <ia...@gmail.com>.
Your BooleanQuery code looks fine.  Do the label and abstract searches
work independently?  Are there docs that match both searches? There
are tips on non-working searches in the FAQ at
http://wiki.apache.org/lucene-java/LuceneFAQ#Why_am_I_getting_no_hits_.2F_incorrect_hits.3F

If that doesn't help I suggest you post the smallest possible
self-contained example that shows the problem.


--
Ian.


On Tue, Aug 6, 2013 at 9:55 PM, David Miranda <da...@gmail.com> wrote:
> I experimented with the previous code, but no results are returned from the
> index. Someone can give me an example? I have been for some time trying to
> implement this functionality.
>
> Thanks.
>
> 2013/8/6 David Miranda <da...@gmail.com>
>
>> Do this with the BooleanQuery:
>>
>>> Query q1 = new QueryParser(Version.LUCENE_43, "label", analyzer
>>> ).parse(label);
>>> Query q2 = new QueryParser(Version.LUCENE_43, "abstract", analyzer
>>> ).parse(abstract);
>>> BooleanQuery bq = new BooleanQuery();
>>> booleanQuery.add(q1,BooleanClause.Occur.MUST);
>>> booleanQuery.add(q2,BooleanClause.Occur.MUST);
>>> Hits hits = indexSearcher.search(booleanQuery);
>>
>>
>> This is right for what I want to do?
>>
>> Thanks.
>>
>> 2013/8/6 Ian Lea <ia...@gmail.com>
>>
>> The standard way is to combine the searches by label and abstract into
>>> one query.  If using QueryParser a simple example would look something
>>> like label:aaa abstract:bbb abstract:ccc.  You can get the same
>>> effect, with more flexibility, by building a BooleanQuery in code.
>>>
>>> Also consider using a Filter e.g. QueryWrapperFilter on a query for
>>> label:aaa with the query generated by QueryParser or direct
>>> construction of a TermQuery.  See also CachingWrapperFilter if the
>>> index isn't constantly changing.
>>>
>>>
>>> --
>>> Ian.
>>>
>>>
>>> On Tue, Aug 6, 2013 at 3:19 PM, David Miranda <da...@gmail.com>
>>> wrote:
>>> > Hi,
>>> >
>>> > I have a Lucene index that has the fields label and abstract.
>>> >
>>> > I want to do is first do a search by label field, for this i use:
>>> >
>>> > TopScoreDocCollector collector = TopScoreDocCollector.create(MAX_HITS,
>>> true
>>> >> );
>>> >> searcher.search(q, collector);
>>> >> ScoreDoc[] hits = collector.topDocs().scoreDocs;
>>> >
>>> >
>>> > After the results of the first survey, I want to do a search in the
>>> > abstract field only in results obtained from the first survey.
>>> >
>>> > How i do this?
>>> > Thanks in advance.
>>> >
>>> > David
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
>>> For additional commands, e-mail: java-user-help@lucene.apache.org
>>>
>>>
>>
>>
>> --
>> Cumprimentos,
>> David Miranda
>>
>
>
>
> --
> Cumprimentos,
> David Miranda

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


Re: Searching within a Search Result

Posted by David Miranda <da...@gmail.com>.
I experimented with the previous code, but no results are returned from the
index. Someone can give me an example? I have been for some time trying to
implement this functionality.

Thanks.

2013/8/6 David Miranda <da...@gmail.com>

> Do this with the BooleanQuery:
>
>> Query q1 = new QueryParser(Version.LUCENE_43, "label", analyzer
>> ).parse(label);
>> Query q2 = new QueryParser(Version.LUCENE_43, "abstract", analyzer
>> ).parse(abstract);
>> BooleanQuery bq = new BooleanQuery();
>> booleanQuery.add(q1,BooleanClause.Occur.MUST);
>> booleanQuery.add(q2,BooleanClause.Occur.MUST);
>> Hits hits = indexSearcher.search(booleanQuery);
>
>
> This is right for what I want to do?
>
> Thanks.
>
> 2013/8/6 Ian Lea <ia...@gmail.com>
>
> The standard way is to combine the searches by label and abstract into
>> one query.  If using QueryParser a simple example would look something
>> like label:aaa abstract:bbb abstract:ccc.  You can get the same
>> effect, with more flexibility, by building a BooleanQuery in code.
>>
>> Also consider using a Filter e.g. QueryWrapperFilter on a query for
>> label:aaa with the query generated by QueryParser or direct
>> construction of a TermQuery.  See also CachingWrapperFilter if the
>> index isn't constantly changing.
>>
>>
>> --
>> Ian.
>>
>>
>> On Tue, Aug 6, 2013 at 3:19 PM, David Miranda <da...@gmail.com>
>> wrote:
>> > Hi,
>> >
>> > I have a Lucene index that has the fields label and abstract.
>> >
>> > I want to do is first do a search by label field, for this i use:
>> >
>> > TopScoreDocCollector collector = TopScoreDocCollector.create(MAX_HITS,
>> true
>> >> );
>> >> searcher.search(q, collector);
>> >> ScoreDoc[] hits = collector.topDocs().scoreDocs;
>> >
>> >
>> > After the results of the first survey, I want to do a search in the
>> > abstract field only in results obtained from the first survey.
>> >
>> > How i do this?
>> > Thanks in advance.
>> >
>> > David
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
>> For additional commands, e-mail: java-user-help@lucene.apache.org
>>
>>
>
>
> --
> Cumprimentos,
> David Miranda
>



-- 
Cumprimentos,
David Miranda

Re: Searching within a Search Result

Posted by David Miranda <da...@gmail.com>.
Do this with the BooleanQuery:

> Query q1 = new QueryParser(Version.LUCENE_43, "label", analyzer
> ).parse(label);
> Query q2 = new QueryParser(Version.LUCENE_43, "abstract", analyzer
> ).parse(abstract);
> BooleanQuery bq = new BooleanQuery();
> booleanQuery.add(q1,BooleanClause.Occur.MUST);
> booleanQuery.add(q2,BooleanClause.Occur.MUST);
> Hits hits = indexSearcher.search(booleanQuery);


This is right for what I want to do?

Thanks.

2013/8/6 Ian Lea <ia...@gmail.com>

The standard way is to combine the searches by label and abstract into
> one query.  If using QueryParser a simple example would look something
> like label:aaa abstract:bbb abstract:ccc.  You can get the same
> effect, with more flexibility, by building a BooleanQuery in code.
>
> Also consider using a Filter e.g. QueryWrapperFilter on a query for
> label:aaa with the query generated by QueryParser or direct
> construction of a TermQuery.  See also CachingWrapperFilter if the
> index isn't constantly changing.
>
>
> --
> Ian.
>
>
> On Tue, Aug 6, 2013 at 3:19 PM, David Miranda <da...@gmail.com>
> wrote:
> > Hi,
> >
> > I have a Lucene index that has the fields label and abstract.
> >
> > I want to do is first do a search by label field, for this i use:
> >
> > TopScoreDocCollector collector = TopScoreDocCollector.create(MAX_HITS,
> true
> >> );
> >> searcher.search(q, collector);
> >> ScoreDoc[] hits = collector.topDocs().scoreDocs;
> >
> >
> > After the results of the first survey, I want to do a search in the
> > abstract field only in results obtained from the first survey.
> >
> > How i do this?
> > Thanks in advance.
> >
> > David
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
> For additional commands, e-mail: java-user-help@lucene.apache.org
>
>


-- 
Cumprimentos,
David Miranda

Re: Searching within a Search Result

Posted by Ian Lea <ia...@gmail.com>.
The standard way is to combine the searches by label and abstract into
one query.  If using QueryParser a simple example would look something
like label:aaa abstract:bbb abstract:ccc.  You can get the same
effect, with more flexibility, by building a BooleanQuery in code.

Also consider using a Filter e.g. QueryWrapperFilter on a query for
label:aaa with the query generated by QueryParser or direct
construction of a TermQuery.  See also CachingWrapperFilter if the
index isn't constantly changing.


--
Ian.


On Tue, Aug 6, 2013 at 3:19 PM, David Miranda <da...@gmail.com> wrote:
> Hi,
>
> I have a Lucene index that has the fields label and abstract.
>
> I want to do is first do a search by label field, for this i use:
>
> TopScoreDocCollector collector = TopScoreDocCollector.create(MAX_HITS, true
>> );
>> searcher.search(q, collector);
>> ScoreDoc[] hits = collector.topDocs().scoreDocs;
>
>
> After the results of the first survey, I want to do a search in the
> abstract field only in results obtained from the first survey.
>
> How i do this?
> Thanks in advance.
>
> David

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