You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-dev@lucene.apache.org by Brian Whitman <br...@variogr.am> on 2007/02/08 19:07:56 UTC

Where to put in custom query rewriter?

I have a custom Lucene module that when given a string, returns a  
Lucene query.
It's quite like the MoreLikeThis query and performs a similar task  
(returns the closest doc ids to the string), but you can only query  
by string, not by doc id or anything.  (I can't use MLT for reasons I  
don't want to clutter up this post with)

I'd like to put this in Solr. I was initially following the example  
of the MLT patch (SOLR-61) but the MLT patch appears to work on a  
list of results to generate more results. (e.g. you have to query  
id:xxx first, and it adds to those results the ones like id:xxx.)

I would rather this handler get installed as a "rewriter" e.g., Solr  
gets a query like

contents:kittens AND specialfield_X:"special query"

and it sees the specialfield_ prefix, passes it to the Lucene query  
rewriter module, which replaces it with something like (id:e1^0.9 OR  
id:e2^0.5)

And then Solr just does it usual thing with the result:  
contents:kittens AND (id:e1^0.9 OR id:e2^0.5)

Where should I put this in my hacked up fork of Solr? The one  
requirement is that my Lucene rewriter needs to be instantiated with  
an IndexReader object, just like the MLT query object. So it has to  
be somewhere in Solr that knows about the IndexReader /  
SolrQueryRequest / SolrIndexSearcher but hasn't done any query  
parsing or searching yet.

-Brian







Re: Where to put in custom query rewriter?

Posted by Chris Hostetter <ho...@fucit.org>.
what you describe sounds almost like a new type of query that rewrites
itself according to your custom rules (Query.rewrite takes in an
INdexReader for this type of purpose) along with a customization of
SolrQueryParser so you can look for your special field and use your custom
query class in that case instead of a regular TermQuery.

: Date: Thu, 8 Feb 2007 13:07:56 -0500
: From: Brian Whitman <br...@variogr.am>
: Reply-To: solr-dev@lucene.apache.org
: To: solr-dev@lucene.apache.org
: Subject: Where to put in custom query rewriter?
:
: I have a custom Lucene module that when given a string, returns a
: Lucene query.
: It's quite like the MoreLikeThis query and performs a similar task
: (returns the closest doc ids to the string), but you can only query
: by string, not by doc id or anything.  (I can't use MLT for reasons I
: don't want to clutter up this post with)
:
: I'd like to put this in Solr. I was initially following the example
: of the MLT patch (SOLR-61) but the MLT patch appears to work on a
: list of results to generate more results. (e.g. you have to query
: id:xxx first, and it adds to those results the ones like id:xxx.)
:
: I would rather this handler get installed as a "rewriter" e.g., Solr
: gets a query like
:
: contents:kittens AND specialfield_X:"special query"
:
: and it sees the specialfield_ prefix, passes it to the Lucene query
: rewriter module, which replaces it with something like (id:e1^0.9 OR
: id:e2^0.5)
:
: And then Solr just does it usual thing with the result:
: contents:kittens AND (id:e1^0.9 OR id:e2^0.5)
:
: Where should I put this in my hacked up fork of Solr? The one
: requirement is that my Lucene rewriter needs to be instantiated with
: an IndexReader object, just like the MLT query object. So it has to
: be somewhere in Solr that knows about the IndexReader /
: SolrQueryRequest / SolrIndexSearcher but hasn't done any query
: parsing or searching yet.
:
: -Brian
:
:
:
:
:
:



-Hoss