You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-user@lucene.apache.org by li...@yahoo.com.INVALID on 2015/10/08 13:53:15 UTC

How to show some documents ahead of others

Hi everybody, 
I'm building a recipe search engine based on solr. 
Paid postings must be listed on the front page, ahead of non-paid postings. 
When a user performs a query based on some keywords, solr returns documents in the decreasing order of their score. However, I don't know how to make paid postings that match the query to be listed ahead of the un-paid postings that match the query. 
How to I give paid postings an extra scoring so that I can listed them on the first page? What other solutions would be?

Please advice, 

Much obliged, 
Christian 

Re: How to show some documents ahead of others

Posted by Alessandro Benedetti <be...@gmail.com>.
Thanks Andrea, I agree with you.
 It seems much likely the classic " Relevancy biased by date" .
But instead of having new docs we have paying docs.
Probably a boost function can be helpful as already said.

Cheers

On 8 October 2015 at 17:03, Upayavira <uv...@odoko.co.uk> wrote:

> Hence the suggestion to group by the paid field - would give you two
> lists of the number you ask for.
>
> What I'm trying to say is that the QueryElevationComponent might do it,
> but it is also relatively clunky, so a pure search solution might do it.
>
> However, the thing we lack right now is a full take on the requirements,
> e.g. how should paid results be sorted, how many paid results do you
> show, etc, etc. Without these details we're all guessing.
>
> Upayavira
>
>
> On Thu, Oct 8, 2015, at 04:45 PM, Walter Underwood wrote:
> > Sorting all paid above all unpaid will give bad results when there are
> > many matches. It will show 1000 paid items, include all the barely
> > relevant ones, before it shows the first highly relevant unpaid recipe.
> > What if that was the only correct result?
> >
> > Two approaches that work:
> >
> > 1. Boost paid items using the “boost” parameter in edismax. Adjust it to
> > be a tiebreaker between documents with similar score.
> >
> > 2. Show two lists, one with the five most relevant paid, the next with
> > the five most relevant unpaid.
> >
> > wunder
> > Walter Underwood
> > wunder@wunderwood.org
> > http://observer.wunderwood.org/  (my blog)
> >
> >
> > > On Oct 8, 2015, at 7:39 AM, Alessandro Benedetti <
> benedetti.alex85@gmail.com> wrote:
> > >
> > > Is it possible to understand better this : "as it doesn't
> > > allow any meaningful customization " ?
> > >
> > > Cheers
> > >
> > > On 8 October 2015 at 15:27, Andrea Roggerone <
> andrearoggerone.osrc@gmail.com
> > >> wrote:
> > >
> > >> Hi guys,
> > >> I don't think that sorting is a good solution in this case as it
> doesn't
> > >> allow any meaningful customization.I believe that the advised
> > >> QueryElevationComponent is one of the viable alternative. Another one
> would
> > >> be to boost at query time a particular field, like for instance paid.
> That
> > >> would allow you to assign different boosts to different values using a
> > >> function.
> > >>
> > >> On Thu, Oct 8, 2015 at 1:48 PM, Upayavira <uv...@odoko.co.uk> wrote:
> > >>
> > >>> Or just have a field in your index -
> > >>>
> > >>> paid: true/false
> > >>>
> > >>> Then sort=paid desc, score desc
> > >>>
> > >>> (you may need to sort paid asc, not sure which way a boolean would
> sort)
> > >>>
> > >>> Question is whether you want to show ALL paid posts, or just a set of
> > >>> them. For the latter you could use result grouping on the paid field.
> > >>>
> > >>> Upayavira
> > >>>
> > >>> On Thu, Oct 8, 2015, at 01:34 PM, NutchDev wrote:
> > >>>> Hi Christian,
> > >>>>
> > >>>> You can take a look at Solr's  QueryElevationComponent
> > >>>> <https://wiki.apache.org/solr/QueryElevationComponent>  .
> > >>>>
> > >>>> It will allow you to configure the top results for a given query
> > >>>> regardless
> > >>>> of the normal lucene scoring. Also you can specify exclude document
> > >> list
> > >>>> to
> > >>>> exclude certain results for perticular query.
> > >>>>
> > >>>>
> > >>>>
> > >>>>
> > >>>>
> > >>>> --
> > >>>> View this message in context:
> > >>>>
> > >>>
> > >>
> http://lucene.472066.n3.nabble.com/How-to-show-some-documents-ahead-of-others-tp4233481p4233490.html
> > >>>> Sent from the Solr - User mailing list archive at Nabble.com.
> > >>>
> > >>
> > >
> > >
> > >
> > > --
> > > --------------------------
> > >
> > > Benedetti Alessandro
> > > Visiting card - http://about.me/alessandro_benedetti
> > > Blog - http://alexbenedetti.blogspot.co.uk
> > >
> > > "Tyger, tyger burning bright
> > > In the forests of the night,
> > > What immortal hand or eye
> > > Could frame thy fearful symmetry?"
> > >
> > > William Blake - Songs of Experience -1794 England
> >
>



-- 
--------------------------

Benedetti Alessandro
Visiting card - http://about.me/alessandro_benedetti
Blog - http://alexbenedetti.blogspot.co.uk

"Tyger, tyger burning bright
In the forests of the night,
What immortal hand or eye
Could frame thy fearful symmetry?"

William Blake - Songs of Experience -1794 England

How to show some documents ahead of others

Posted by li...@yahoo.com.INVALID.
Hi everybody, 
I'm building a recipe search engine based on solr. 
Paid postings must be listed on the front page, ahead of non-paid postings. 
When a user performs a query based on some keywords, solr returns documents in the decreasing order of their score. However, I don't know how to make paid postings that match the query to be listed ahead of the un-paid postings that match the query. 
How to I give paid postings an extra scoring so that I can listed them on the first page? What other solutions would be?

Please advice, 

Much obliged, 
Christian 

Re: How to show some documents ahead of others

Posted by Upayavira <uv...@odoko.co.uk>.
Or just have a field in your index - 

paid: true/false

Then sort=paid desc, score desc

(you may need to sort paid asc, not sure which way a boolean would sort)

Question is whether you want to show ALL paid posts, or just a set of
them. For the latter you could use result grouping on the paid field.

Upayavira

On Thu, Oct 8, 2015, at 01:34 PM, NutchDev wrote:
> Hi Christian,
> 
> You can take a look at Solr's  QueryElevationComponent
> <https://wiki.apache.org/solr/QueryElevationComponent>  . 
> 
> It will allow you to configure the top results for a given query
> regardless
> of the normal lucene scoring. Also you can specify exclude document list
> to
> exclude certain results for perticular query.
> 
> 
> 
> 
> 
> --
> View this message in context:
> http://lucene.472066.n3.nabble.com/How-to-show-some-documents-ahead-of-others-tp4233481p4233490.html
> Sent from the Solr - User mailing list archive at Nabble.com.

Re: How to show some documents ahead of others

Posted by Andrea Roggerone <an...@gmail.com>.
Hi guys,
I don't think that sorting is a good solution in this case as it doesn't
allow any meaningful customization.I believe that the advised
QueryElevationComponent is one of the viable alternative. Another one would
be to boost at query time a particular field, like for instance paid. That
would allow you to assign different boosts to different values using a
function.

On Thu, Oct 8, 2015 at 1:48 PM, Upayavira <uv...@odoko.co.uk> wrote:

> Or just have a field in your index -
>
> paid: true/false
>
> Then sort=paid desc, score desc
>
> (you may need to sort paid asc, not sure which way a boolean would sort)
>
> Question is whether you want to show ALL paid posts, or just a set of
> them. For the latter you could use result grouping on the paid field.
>
> Upayavira
>
> On Thu, Oct 8, 2015, at 01:34 PM, NutchDev wrote:
> > Hi Christian,
> >
> > You can take a look at Solr's  QueryElevationComponent
> > <https://wiki.apache.org/solr/QueryElevationComponent>  .
> >
> > It will allow you to configure the top results for a given query
> > regardless
> > of the normal lucene scoring. Also you can specify exclude document list
> > to
> > exclude certain results for perticular query.
> >
> >
> >
> >
> >
> > --
> > View this message in context:
> >
> http://lucene.472066.n3.nabble.com/How-to-show-some-documents-ahead-of-others-tp4233481p4233490.html
> > Sent from the Solr - User mailing list archive at Nabble.com.
>

Re: How to show some documents ahead of others

Posted by Alessandro Benedetti <be...@gmail.com>.
Is it possible to understand better this : "as it doesn't
allow any meaningful customization " ?

Cheers

On 8 October 2015 at 15:27, Andrea Roggerone <andrearoggerone.osrc@gmail.com
> wrote:

> Hi guys,
> I don't think that sorting is a good solution in this case as it doesn't
> allow any meaningful customization.I believe that the advised
> QueryElevationComponent is one of the viable alternative. Another one would
> be to boost at query time a particular field, like for instance paid. That
> would allow you to assign different boosts to different values using a
> function.
>
> On Thu, Oct 8, 2015 at 1:48 PM, Upayavira <uv...@odoko.co.uk> wrote:
>
> > Or just have a field in your index -
> >
> > paid: true/false
> >
> > Then sort=paid desc, score desc
> >
> > (you may need to sort paid asc, not sure which way a boolean would sort)
> >
> > Question is whether you want to show ALL paid posts, or just a set of
> > them. For the latter you could use result grouping on the paid field.
> >
> > Upayavira
> >
> > On Thu, Oct 8, 2015, at 01:34 PM, NutchDev wrote:
> > > Hi Christian,
> > >
> > > You can take a look at Solr's  QueryElevationComponent
> > > <https://wiki.apache.org/solr/QueryElevationComponent>  .
> > >
> > > It will allow you to configure the top results for a given query
> > > regardless
> > > of the normal lucene scoring. Also you can specify exclude document
> list
> > > to
> > > exclude certain results for perticular query.
> > >
> > >
> > >
> > >
> > >
> > > --
> > > View this message in context:
> > >
> >
> http://lucene.472066.n3.nabble.com/How-to-show-some-documents-ahead-of-others-tp4233481p4233490.html
> > > Sent from the Solr - User mailing list archive at Nabble.com.
> >
>



-- 
--------------------------

Benedetti Alessandro
Visiting card - http://about.me/alessandro_benedetti
Blog - http://alexbenedetti.blogspot.co.uk

"Tyger, tyger burning bright
In the forests of the night,
What immortal hand or eye
Could frame thy fearful symmetry?"

William Blake - Songs of Experience -1794 England

Re: How to show some documents ahead of others

Posted by Andrea Roggerone <an...@gmail.com>.
Sure. Let's say that as Upayavira was saying you have in your index:

"paid: true/false
Then sort=paid desc, score desc"

In that case, paid=true and higher score would come up first.
After that you decide that you want to add a set of offers:
Offer 1: cost 1000 euros
Offer 2: cost 100 euros
Offer 3: cost 10 euros
and you expect that user1 (that pays more) appears before user 2 and 3. In
such case the field true/false won't be enough as you don't have any way to
sort user to have offer1 before offer2.

Let's say for sake of conversation that you decide to replace "paid" with a
numeric value paid=1 or 2 or 3. This solution would work better until you
decide to improve relevancy...at that point your new solution wouldn't suit
you anymore.
So "as it doesn't allow any meaningful customization " meant that such
solution is too rigid. Hope it makes sense.



On Thu, Oct 8, 2015 at 3:39 PM, Alessandro Benedetti <
benedetti.alex85@gmail.com> wrote:

> Is it possible to understand better this : "as it doesn't
> allow any meaningful customization " ?
>
> Cheers
>
> On 8 October 2015 at 15:27, Andrea Roggerone <
> andrearoggerone.osrc@gmail.com
> > wrote:
>
> > Hi guys,
> > I don't think that sorting is a good solution in this case as it doesn't
> > allow any meaningful customization.I believe that the advised
> > QueryElevationComponent is one of the viable alternative. Another one
> would
> > be to boost at query time a particular field, like for instance paid.
> That
> > would allow you to assign different boosts to different values using a
> > function.
> >
> > On Thu, Oct 8, 2015 at 1:48 PM, Upayavira <uv...@odoko.co.uk> wrote:
> >
> > > Or just have a field in your index -
> > >
> > > paid: true/false
> > >
> > > Then sort=paid desc, score desc
> > >
> > > (you may need to sort paid asc, not sure which way a boolean would
> sort)
> > >
> > > Question is whether you want to show ALL paid posts, or just a set of
> > > them. For the latter you could use result grouping on the paid field.
> > >
> > > Upayavira
> > >
> > > On Thu, Oct 8, 2015, at 01:34 PM, NutchDev wrote:
> > > > Hi Christian,
> > > >
> > > > You can take a look at Solr's  QueryElevationComponent
> > > > <https://wiki.apache.org/solr/QueryElevationComponent>  .
> > > >
> > > > It will allow you to configure the top results for a given query
> > > > regardless
> > > > of the normal lucene scoring. Also you can specify exclude document
> > list
> > > > to
> > > > exclude certain results for perticular query.
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > --
> > > > View this message in context:
> > > >
> > >
> >
> http://lucene.472066.n3.nabble.com/How-to-show-some-documents-ahead-of-others-tp4233481p4233490.html
> > > > Sent from the Solr - User mailing list archive at Nabble.com.
> > >
> >
>
>
>
> --
> --------------------------
>
> Benedetti Alessandro
> Visiting card - http://about.me/alessandro_benedetti
> Blog - http://alexbenedetti.blogspot.co.uk
>
> "Tyger, tyger burning bright
> In the forests of the night,
> What immortal hand or eye
> Could frame thy fearful symmetry?"
>
> William Blake - Songs of Experience -1794 England
>

Re: How to show some documents ahead of others

Posted by Walter Underwood <wu...@wunderwood.org>.
Sorting all paid above all unpaid will give bad results when there are many matches. It will show 1000 paid items, include all the barely relevant ones, before it shows the first highly relevant unpaid recipe. What if that was the only correct result?

Two approaches that work:

1. Boost paid items using the “boost” parameter in edismax. Adjust it to be a tiebreaker between documents with similar score.

2. Show two lists, one with the five most relevant paid, the next with the five most relevant unpaid.

wunder
Walter Underwood
wunder@wunderwood.org
http://observer.wunderwood.org/  (my blog)


> On Oct 8, 2015, at 7:39 AM, Alessandro Benedetti <be...@gmail.com> wrote:
> 
> Is it possible to understand better this : "as it doesn't
> allow any meaningful customization " ?
> 
> Cheers
> 
> On 8 October 2015 at 15:27, Andrea Roggerone <andrearoggerone.osrc@gmail.com
>> wrote:
> 
>> Hi guys,
>> I don't think that sorting is a good solution in this case as it doesn't
>> allow any meaningful customization.I believe that the advised
>> QueryElevationComponent is one of the viable alternative. Another one would
>> be to boost at query time a particular field, like for instance paid. That
>> would allow you to assign different boosts to different values using a
>> function.
>> 
>> On Thu, Oct 8, 2015 at 1:48 PM, Upayavira <uv...@odoko.co.uk> wrote:
>> 
>>> Or just have a field in your index -
>>> 
>>> paid: true/false
>>> 
>>> Then sort=paid desc, score desc
>>> 
>>> (you may need to sort paid asc, not sure which way a boolean would sort)
>>> 
>>> Question is whether you want to show ALL paid posts, or just a set of
>>> them. For the latter you could use result grouping on the paid field.
>>> 
>>> Upayavira
>>> 
>>> On Thu, Oct 8, 2015, at 01:34 PM, NutchDev wrote:
>>>> Hi Christian,
>>>> 
>>>> You can take a look at Solr's  QueryElevationComponent
>>>> <https://wiki.apache.org/solr/QueryElevationComponent>  .
>>>> 
>>>> It will allow you to configure the top results for a given query
>>>> regardless
>>>> of the normal lucene scoring. Also you can specify exclude document
>> list
>>>> to
>>>> exclude certain results for perticular query.
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> --
>>>> View this message in context:
>>>> 
>>> 
>> http://lucene.472066.n3.nabble.com/How-to-show-some-documents-ahead-of-others-tp4233481p4233490.html
>>>> Sent from the Solr - User mailing list archive at Nabble.com.
>>> 
>> 
> 
> 
> 
> -- 
> --------------------------
> 
> Benedetti Alessandro
> Visiting card - http://about.me/alessandro_benedetti
> Blog - http://alexbenedetti.blogspot.co.uk
> 
> "Tyger, tyger burning bright
> In the forests of the night,
> What immortal hand or eye
> Could frame thy fearful symmetry?"
> 
> William Blake - Songs of Experience -1794 England


Re: How to show some documents ahead of others

Posted by Upayavira <uv...@odoko.co.uk>.
Hence the suggestion to group by the paid field - would give you two
lists of the number you ask for.

What I'm trying to say is that the QueryElevationComponent might do it,
but it is also relatively clunky, so a pure search solution might do it.

However, the thing we lack right now is a full take on the requirements,
e.g. how should paid results be sorted, how many paid results do you
show, etc, etc. Without these details we're all guessing.

Upayavira


On Thu, Oct 8, 2015, at 04:45 PM, Walter Underwood wrote:
> Sorting all paid above all unpaid will give bad results when there are
> many matches. It will show 1000 paid items, include all the barely
> relevant ones, before it shows the first highly relevant unpaid recipe.
> What if that was the only correct result?
> 
> Two approaches that work:
> 
> 1. Boost paid items using the “boost” parameter in edismax. Adjust it to
> be a tiebreaker between documents with similar score.
> 
> 2. Show two lists, one with the five most relevant paid, the next with
> the five most relevant unpaid.
> 
> wunder
> Walter Underwood
> wunder@wunderwood.org
> http://observer.wunderwood.org/  (my blog)
> 
> 
> > On Oct 8, 2015, at 7:39 AM, Alessandro Benedetti <be...@gmail.com> wrote:
> > 
> > Is it possible to understand better this : "as it doesn't
> > allow any meaningful customization " ?
> > 
> > Cheers
> > 
> > On 8 October 2015 at 15:27, Andrea Roggerone <andrearoggerone.osrc@gmail.com
> >> wrote:
> > 
> >> Hi guys,
> >> I don't think that sorting is a good solution in this case as it doesn't
> >> allow any meaningful customization.I believe that the advised
> >> QueryElevationComponent is one of the viable alternative. Another one would
> >> be to boost at query time a particular field, like for instance paid. That
> >> would allow you to assign different boosts to different values using a
> >> function.
> >> 
> >> On Thu, Oct 8, 2015 at 1:48 PM, Upayavira <uv...@odoko.co.uk> wrote:
> >> 
> >>> Or just have a field in your index -
> >>> 
> >>> paid: true/false
> >>> 
> >>> Then sort=paid desc, score desc
> >>> 
> >>> (you may need to sort paid asc, not sure which way a boolean would sort)
> >>> 
> >>> Question is whether you want to show ALL paid posts, or just a set of
> >>> them. For the latter you could use result grouping on the paid field.
> >>> 
> >>> Upayavira
> >>> 
> >>> On Thu, Oct 8, 2015, at 01:34 PM, NutchDev wrote:
> >>>> Hi Christian,
> >>>> 
> >>>> You can take a look at Solr's  QueryElevationComponent
> >>>> <https://wiki.apache.org/solr/QueryElevationComponent>  .
> >>>> 
> >>>> It will allow you to configure the top results for a given query
> >>>> regardless
> >>>> of the normal lucene scoring. Also you can specify exclude document
> >> list
> >>>> to
> >>>> exclude certain results for perticular query.
> >>>> 
> >>>> 
> >>>> 
> >>>> 
> >>>> 
> >>>> --
> >>>> View this message in context:
> >>>> 
> >>> 
> >> http://lucene.472066.n3.nabble.com/How-to-show-some-documents-ahead-of-others-tp4233481p4233490.html
> >>>> Sent from the Solr - User mailing list archive at Nabble.com.
> >>> 
> >> 
> > 
> > 
> > 
> > -- 
> > --------------------------
> > 
> > Benedetti Alessandro
> > Visiting card - http://about.me/alessandro_benedetti
> > Blog - http://alexbenedetti.blogspot.co.uk
> > 
> > "Tyger, tyger burning bright
> > In the forests of the night,
> > What immortal hand or eye
> > Could frame thy fearful symmetry?"
> > 
> > William Blake - Songs of Experience -1794 England
>