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 Jón Helgi Jónsson <jo...@gmail.com> on 2010/11/17 13:23:48 UTC

How do I format this query with 2 search terms?

I'm using index time boosting and need to specify every field I want
to search (not use copy fields) or else the boosting wont work.

This query with 1 saerchterm works fine, boosts look good:

http://localhost:8983/solr/select/?
q=companyName:foo
+descriptionTxt:verslun
&fl=*%20score&rows=10&start=0

However if I have 2 words in the query and do it like this boosting
seems not to be working

http://localhost:8983/solr/select/?
q=companyName:foo+bar
+descriptionTxt:foo+bar
&fl=*%20score&rows=10&start=0

Its probably using the default search field for the second word which
has no boosting configured. How do I go about this?

Thanks,
Jon

Re: How do I format this query with 2 search terms?

Posted by Jón Helgi Jónsson <jo...@gmail.com>.
Thanks a lot for that!

I wanted to use dismax but hit a wall because I require trailing
wildcards in some instances. Methods 1 and 3 do not work in my case.
However upon further thinking I realized in the cases I required
wildcard I'm only searching one field. So I'll just turn dismax on and
off as required.

Thanks again :)

On Wed, Nov 17, 2010 at 12:40 PM, Ken Stanley <do...@gmail.com> wrote:
> 2010/11/17 Jón Helgi Jónsson <jo...@gmail.com>:
>> I'm using index time boosting and need to specify every field I want
>> to search (not use copy fields) or else the boosting wont work.
>>
>> This query with 1 saerchterm works fine, boosts look good:
>>
>> http://localhost:8983/solr/select/?
>> q=companyName:foo
>> +descriptionTxt:verslun
>> &fl=*%20score&rows=10&start=0
>>
>> However if I have 2 words in the query and do it like this boosting
>> seems not to be working
>>
>> http://localhost:8983/solr/select/?
>> q=companyName:foo+bar
>> +descriptionTxt:foo+bar
>> &fl=*%20score&rows=10&start=0
>>
>> Its probably using the default search field for the second word which
>> has no boosting configured. How do I go about this?
>>
>> Thanks,
>> Jon
>>
>
> Jon,
>
> You have a few options here, depending on what you want to achieve
> with your query:
>
> 1. If you're trying to do a phrase query, you simply need to ensure
> that your phrases are quoted. The default behavior in SOLR is to split
> the phrase into multiple chunks. If a word is not preceded with a
> field definition, then SOLR will automatically apply the word(s) as if
> you had specified the default field. So for your example, SOLR would
> parse your query into companyName:foo defaultField:bar
> descriptionTxt:foo defaultField:bar.
> 2. You can use the dismax query plugin instead of the standard query
> plugin. You simply configure the dismax section of your solrconfig.xml
> to your liking - you define which fields to search, apply any special
> boosts for your needs, etc
> (http://wiki.apache.org/solr/DisMaxQParserPlugin) - and then you
> simply feed the query terms without naming your fields (i.e.,
> q=foo+bar), along with telling SOLR to use dismax (i.e.,
> qt=whatever_you_named_your_dismax_handler).
> 3. If phrase queries are not important to you, you can manually prefix
> each term in your query with the field you wish to search; for
> example, you would do companyName:foo companyName:bar
> descriptionTxt:foo descriptionTxt:bar.
>
> Whichever way you decide to go, the best thing that you can do to
> understand SOLR and how it's working in your environment is to append
> debugQuery=on to the end of your URL; this tells SOLR to output
> information about how it parsed your query, how long each component
> took to run, and some other useful debugging information. It's very
> useful, and has come in handy several times here where I'm at when I
> wanted to know why SOLR returned the results (or didn't return) that I
> expected.
>
> I hope this helps.
>
> - Ken
>

Re: How do I format this query with 2 search terms?

Posted by Ken Stanley <do...@gmail.com>.
2010/11/17 Jón Helgi Jónsson <jo...@gmail.com>:
> I'm using index time boosting and need to specify every field I want
> to search (not use copy fields) or else the boosting wont work.
>
> This query with 1 saerchterm works fine, boosts look good:
>
> http://localhost:8983/solr/select/?
> q=companyName:foo
> +descriptionTxt:verslun
> &fl=*%20score&rows=10&start=0
>
> However if I have 2 words in the query and do it like this boosting
> seems not to be working
>
> http://localhost:8983/solr/select/?
> q=companyName:foo+bar
> +descriptionTxt:foo+bar
> &fl=*%20score&rows=10&start=0
>
> Its probably using the default search field for the second word which
> has no boosting configured. How do I go about this?
>
> Thanks,
> Jon
>

Jon,

You have a few options here, depending on what you want to achieve
with your query:

1. If you're trying to do a phrase query, you simply need to ensure
that your phrases are quoted. The default behavior in SOLR is to split
the phrase into multiple chunks. If a word is not preceded with a
field definition, then SOLR will automatically apply the word(s) as if
you had specified the default field. So for your example, SOLR would
parse your query into companyName:foo defaultField:bar
descriptionTxt:foo defaultField:bar.
2. You can use the dismax query plugin instead of the standard query
plugin. You simply configure the dismax section of your solrconfig.xml
to your liking - you define which fields to search, apply any special
boosts for your needs, etc
(http://wiki.apache.org/solr/DisMaxQParserPlugin) - and then you
simply feed the query terms without naming your fields (i.e.,
q=foo+bar), along with telling SOLR to use dismax (i.e.,
qt=whatever_you_named_your_dismax_handler).
3. If phrase queries are not important to you, you can manually prefix
each term in your query with the field you wish to search; for
example, you would do companyName:foo companyName:bar
descriptionTxt:foo descriptionTxt:bar.

Whichever way you decide to go, the best thing that you can do to
understand SOLR and how it's working in your environment is to append
debugQuery=on to the end of your URL; this tells SOLR to output
information about how it parsed your query, how long each component
took to run, and some other useful debugging information. It's very
useful, and has come in handy several times here where I'm at when I
wanted to know why SOLR returned the results (or didn't return) that I
expected.

I hope this helps.

- Ken