Hi Steve,

It would be simpler if I have a query called SubPhraseQuery in which case I
do not have to either generate extra terms during ingestion or generate
extra queries during querying. As a user, the best I would hope for is, to
ingest the data from some feed into different fields, run the user query as
is using some set of lucene queries and get most relevant results without
worrying much about the internals  of scoring.

In my case, I know that each field will most likely match some sub phrase of
the user query and need to have a query or solr request handler which
handles this case.

For cases where I care more about exact matches or sub phrase matches and
not about tf or idf, I think a SubPhraseQuery with the following parameters
will be great.
phraseBoostFactor - factor which tells how good a n term match is than n-1
term match.
useHighestMatch - which picks only the best sub phrase match as the score
ignoreDuplicates - ignores duplicate sub phrase matches.

Currently I have tried using Solr's dismax handler as well as standard
request handler with boosts and other parameters, but out of 3 million
documents, unable to get the most relevant top 5 results which is most
important for me.Trying to understand the scoring and fine tuning was no
help either. To get the most relevant top 10 results, I am willing to
resorting to some kind of exact match based scores rather than rely on
lucene's scoring formulas.

If a query like above is in place, then one can use another solr request
handler similar to dismax, which uses SubPhraseQuerries instead of dismax.
And for a user who is more interested in exact/sub phrase matches in some
fields and normal boolean matches in other, the additional parameters at the
handler level would be more useful.
matchOnlyOneField - matches only one field and does not use matched terms on
another field.
ignoretfIdf - On a per field basis, allows one to ignore some scoring
calculations and just use the sub phrase scores.

This handler combined with sub phrase query parameters can prove very useful
in handling user queries as they are , with lot more flexibility.

I believe, the same use case might exist for many users who have mostly
structured data with only some portions of it being free text, like
description, reviews etc and want to handle user entered queries as is
without resorting to query interpretation of score tuning.

Thanks
Preetam

On Mon, Jul 14, 2008 at 11:33 PM, Steven A Rowe <[EMAIL PROTECTED]> wrote:

> Hi Preetam,
>
> On 07/14/2008 at 1:40 PM, Preetam Rao wrote:
> > Is there a query in Lucene which matches sub phrases ?
> >
> [snip]
> >
> > I was redirected to Shingle filter which is a token filter
> > that spits out n-grams. But it does not seem to be best solution
> > since one does not know in advance what n in n-grams should be.
>
> You could guess at the useful range, though, and then have ((max n)-(min
> n)+1) fields, scaling the boost for each with the corresponding value of n.
>
> Just using 2-grams could be good enough, since the longer the sub-phrase
> match, the more matching 2-grams.
>
> > Also it means one has to get all these bi grams and then construct
> > a boolean OR query which is not very efficient either.
>
> In terms of your requirements, though, I think you're stuck with this
> inefficiency, no matter what solution you end up with; you need to do some
> form of term combination in your queries.  And the ShingleFilter approach
> doesn't compare badly here, since positions for phrase queries don't have to
> be looked up during scoring.
>
> If index space efficiency is a concern, though, the
> one-field-per-value-of-n solution I mentioned above could pose a problem.
>
> Steve
>
> ------------------------------
---------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>



      Bring your gang together. Do your thing. Find your favourite Yahoo! group 
at http://in.promos.yahoo.com/groups/

Reply via email to