On Feb 7, 2005, at 11:29 AM, Ravi wrote:

How do I set the analyzer when I build the query in my code instead of
using a query parser ?

You don't. All terms you use for any Query subclasses you instantiate must match exactly the terms in the index. If you need an analyzer to do this then you're responsible for doing it yourself, just as QueryParser does underneath. I do this myself in my current application like this:


private Query createPhraseQuery(String fieldName, String string, boolean lowercase) {
RossettiAnalyzer analyzer = new RossettiAnalyzer(lowercase);
TokenStream stream = analyzer.tokenStream(fieldName, new StringReader(string));


        PhraseQuery pq = new PhraseQuery();
        Token token;
        try {
          while ((token = stream.next()) != null) {
              pq.add(new Term(fieldName, token.termText()));
          }
        } catch (IOException ignored) {
          // ignore - shouldn't get an IOException on a StringReader
        }

        if (pq.getTerms().length == 1) {
            // optimize single term phrase to TermQuery
            return new TermQuery(pq.getTerms()[0]);
        }

        return pq;
    }

Hope that helps.

        Erik


--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to