Right, you can't do that. TermQuerys are low-level, they don't go through analyzers, you have to do the tokenizing yourself.
StandardAnalyzer, among other things, lowercases the tokens. If you haven't already got a copy of Luke, please do so as it's a wonderful tool for seeing what different analyzers do. Not to mention examining your index. Not to mention.... You could do something like BooleanQuery bq = new BooleanQuery() Query q = queryParser.parse("Lucene") bq.add(q, BooleanClause.Occur.MUST) Hits result = luceneContext.search(bq); but I don't know whether this suits your needs. You're still testing the query parser rather than testing building BooleanQuerys. (note, I haven't compiled this....). BTW, the reason your test is failing is because of the case issue, I believe. You'd get the results you expect if you did something like: luceneContext.search(new TermQuery(new Term(LuceneContext.TITLE, "lucene"))); (not lower-case "lucene"). You could also do something like getting the tokenStream from StandardAnalyzer call next(), adding each returned token as a new Term to your BooleanQuery. But TermQuery etc. are different beasts than the a parsed query. But isn't this the wonderful thing about tests? They make your assumptions explicit, and when your assumptions are incorrect, you find it with much less pain than in a working program where you say "the most recent change I made couldn't possibly have broken anything" <G>. Best Erick On Mon, Sep 22, 2008 at 10:01 AM, Giannandrea Castaldi <[EMAIL PROTECTED] > wrote: > On Mon, Sep 22, 2008 at 2:49 PM, Erick Erickson <[EMAIL PROTECTED]> > wrote: > > What do you mean when you say "trying to use the lucene api to build > > queries"? > > Are you trying to use BooleanQuery? If so, you either construct specific > > clauses yourself (presumably by, say, tokenizing things yourself and > > creating TermQuerys, PhraseQuerys, etc.) which *don't* need an > > analyzer, or add Querys that you get from running stuff through > > QueryParser that has a constructor that takes an Analyzer. > > > > Code snippets or more specific questions would be a great help <G>... > > Imagine yourself trying to respond to an e-mail like you sent. There > > isn't enough information there to really understand the problem you're > > trying to solve, so I have to guess. > > Sorry, my question was indeed too generic. > I've written several tests to take confidence with behavior of Lucene, > all using the StandardAnalyzer and the QueryParser. All the tests > pass. > Now I'm trying to write the same tests using > Term/TermQuery/BooleanQuery but they don't works. Now I've found out > that the problem is that using directly Term/TermQuery/BooleanQuery > I'm not specifying the analyzer and then the query is not correct. > Here one test with the use of the QueryParser, that works, and the > current vesion with Term that doesn't work: > > @Test > public void testSimpleSearch() throws Exception > { > LuceneContext luceneContext = new LuceneContext(); > Document luceneInAction = luceneContext.createDocument("Lucene > in action", 193, "9.90"); > Document luceneForDummies = > luceneContext.createDocument("Lucene for dummies", 245, "11.50"); > Document tomcatInAction = luceneContext.createDocument("Tomcat > in action", 728, "110.30"); > luceneContext.addDocument(luceneInAction); > luceneContext.addDocument(luceneForDummies); > luceneContext.addDocument(tomcatInAction); > luceneContext.closeIndex(); > QueryParser queryParser = new QueryParser(LuceneContext.TITLE, > new StandardAnalyzer()); > Hits result = luceneContext.search(queryParser.parse("Lucene")); > assertEquals(result, Arrays.asList(luceneInAction, > luceneForDummies)); > } > > @Test > public void testSimpleSearch() throws Exception > { > LuceneContext luceneContext = new LuceneContext(); > Document luceneInAction = luceneContext.createDocument("Lucene > in action", 193, "9.90"); > Document luceneForDummies = > luceneContext.createDocument("Lucene for dummies", 245, "11.50"); > Document tomcatInAction = luceneContext.createDocument("Tomcat > in action", 728, "110.30"); > luceneContext.addDocument(luceneInAction); > luceneContext.addDocument(luceneForDummies); > luceneContext.addDocument(tomcatInAction); > luceneContext.closeIndex(); > Hits result = luceneContext.search(new TermQuery(new > Term(LuceneContext.TITLE, "Lucene"))); > assertEquals(result, Arrays.asList(luceneInAction, > luceneForDummies)); > } > > Now, in our webapp, to execute query on the index we compose a query > as string passed to QueryParser. We've read on the lucene > documentation that from code is better compose a BooleanQuery using > Term/TermQuery/... and then I'm evaluting how do it. > Thanks. > jean71 > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > >