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/