Thanks Erik,

Your suggestion below works great.

And we do want a particularly relevant Citation to appear higher in the list.

I'm guessing that the value of the boost (you've given "5" in your example) is important to getting the Citations to be just high enough.

Is there a way for me to determine, in a generic way, what a good value for that boost would be? Since there are an infinite number of possible queries the user can make, I don't think trial and error is particularly useful.

Are there any rules-of-thumb for determining that number?

Erik Hatcher wrote:
Paul,

Inline below...

On Nov 9, 2009, at 6:28 PM, Paul Rosen wrote:
If I could just create the desired URL, I can probably work backwards and construct the correct ruby call.

Right, this list will always serve you best if you take the Ruby out of the equation. solr-ruby, while cool and all, isn't very well known by many, but Solr URLs are universal lingo here.

http://localhost:8983/solr/resources/select?hl.fragsize=600
&hl=true
&facet.field=genre
&facet.field=archive
&facet.limit=-1
&qt=standard
&start=0
&fq=archive%3A%22blake%22
&hl.fl=text
&fl=uri%2Carchive%2Cdate_label%2Cgenre
&facet=true
&q=%28history%29
&rows=60
&facet.missing=true
&facet.mincount=1

What this search returns from my index is 53 hits. The first 43 contain the genre field value "Citation" and the last 10 do not (they contain other values in that field.)

Note: the genre field is multivalued, if that matters.

It matters if you want to sort by genre. It doesn't make sense to sort by a multivalued field though.

I'd like the search to put all of the objects that contain genre "Citation" below the 10 objects that do not contain that genre.

Are you dogmatic about them _all_ appearing below? Or might it be ok if a Citation that has substantially better term matching than another type of object appear ahead in the results?

I've read the various pages on boosting, but since I'm not actively searching on the field that I want to put a boost value on, I'm not sure how to go about this.

How this is done is dependent on the query parser. You're using the Lucene query parser. Something like this might work for you:

http://localhost:8983/solr/select?q=ipod%20%20OR%20%28ipod%20-manu:Belkin%29^5&debugQuery=true

unurlencoded, that is q=ipod OR (ipod -manu:Belkin)^5, where the users query is repeated in a second clause that boosts up all documents that are not of a particular manufacturer using the example docs that Solr ships with.

Be sure to use debugQuery=true to look at the score explanations (try looking at the output in the wt=ruby&indent=on format for best readability).

Additionally...



Thanks for any hints.

Paul Rosen wrote:
Hi,
I'm using solr-ruby-0.0.8 and solr 1.4.
My data contains a faceted field called "genre". We would like one particular genre, (the one named "Citation") to show up last in the results. I'm having trouble figuring out how to add the boost parameter to the solr-ruby call. Here is my code:
req = Solr::Request::Standard.new(:start => start,
 :rows => max,
 :sort => sort_param,
 :query => query,
 :filter_queries => filter_queries,
 :field_list => @field_list,
 :facets => {:fields => @facet_fields,
   :mincount => 1,
   :missing => true,
   :limit => -1},
 :highlighting => {:field_list => ['text'],
   :fragment_size => 600},
   :shards => @cores)
response = @solr.send(req)
Do I just format it inside my query, like this:
query = query + "AND genre:Citation^.01"
or in filter_query, like this:
filter_queries.push("genre:Citation^.01")
or is there a hash parameter that I set?

filter queries (fq) do not contribute to the score, so boosting them makes no score difference at all.

(Note that the user can select Citation explicitly. I'll probably special case that.)
I've tried variations of the above, but I've had no luck so far.
Thanks,
Paul


    Erik



Reply via email to