You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by Ben Pryor <BP...@widen.com> on 2004/06/24 17:29:26 UTC
Suffix query
Hi,
I have read up on the negative aspects of a SuffixQuery class. Be these as
they may, a situation came up where one is required for an application I'm
working on, so I started with the PrefixQuery class and modified it to match
suffixes instead. The relevant method that changed was the rewrite() method:
public Query rewrite(IndexReader reader) throws IOException
{
BooleanQuery query = new BooleanQuery();
Term startTerm = new Term(suffix.field(), "");
TermEnum enumerator = reader.terms(startTerm);
try
{
String suffixText = suffix.text();
String suffixField = suffix.field();
do
{
Term term = enumerator.term();
if (term != null && term.field() != suffixField)
{
break;
}
if (term != null &&
term.text().endsWith(suffixText))
{
TermQuery tq = new TermQuery(term); //
found a match
tq.setBoost(getBoost()); // set
the boost
query.add(tq, false, false); //
add to query
}
}
while (enumerator.next());
}
finally
{
enumerator.close();
}
return query;
}
Questions: How na�ve is this implementation? How bad will performance be on
a large index, and is there a more efficient way to do this?
Thanks for advice,
Ben
---------------------------------------------------------------------
To unsubscribe, e-mail: lucene-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: lucene-dev-help@jakarta.apache.org
Re: Suffix query
Posted by Erik Hatcher <er...@ehatchersolutions.com>.
WildcardQuery supports suffix (*something) queries when used through
the API (QueryParser does not allow asterisks at the beginning). So I
don't think what you've done is necessary... just use a WildcardQuery
with a leading asterisk.
There are alternative approaches to this by changing how you index to
accommodate suffix queries (reverse what goes in, reverse it and do a
prefix query during querying).
Erik
On Jun 24, 2004, at 11:29 AM, Ben Pryor wrote:
> Hi,
> I have read up on the negative aspects of a SuffixQuery class. Be
> these as
> they may, a situation came up where one is required for an application
> I'm
> working on, so I started with the PrefixQuery class and modified it to
> match
> suffixes instead. The relevant method that changed was the rewrite()
> method:
>
> public Query rewrite(IndexReader reader) throws IOException
> {
> BooleanQuery query = new BooleanQuery();
> Term startTerm = new Term(suffix.field(), "");
> TermEnum enumerator = reader.terms(startTerm);
> try
> {
> String suffixText = suffix.text();
> String suffixField = suffix.field();
> do
> {
> Term term = enumerator.term();
> if (term != null && term.field() != suffixField)
> {
> break;
> }
>
> if (term != null &&
> term.text().endsWith(suffixText))
> {
> TermQuery tq = new TermQuery(term); //
> found a match
> tq.setBoost(getBoost()); // set
> the boost
> query.add(tq, false, false); //
> add to query
> }
> }
> while (enumerator.next());
> }
> finally
> {
> enumerator.close();
> }
> return query;
> }
>
> Questions: How naïve is this implementation? How bad will performance
> be on
> a large index, and is there a more efficient way to do this?
>
> Thanks for advice,
> Ben
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: lucene-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: lucene-dev-help@jakarta.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: lucene-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: lucene-dev-help@jakarta.apache.org