Author: echatellier Date: 2011-06-30 16:29:20 +0200 (Thu, 30 Jun 2011) New Revision: 1013 Url: http://nuiton.org/repositories/revision/wikitty/1013 Log: Implementation like, unlike et test unitaires Modified: trunk/wikitty-lucene/src/main/java/org/nuiton/wikitty/storage/lucene/Restriction2Lucene.java trunk/wikitty-lucene/src/test/java/org/nuiton/wikitty/storage/lucene/WikittySearchEngineLuceneTest.java Modified: trunk/wikitty-lucene/src/main/java/org/nuiton/wikitty/storage/lucene/Restriction2Lucene.java =================================================================== --- trunk/wikitty-lucene/src/main/java/org/nuiton/wikitty/storage/lucene/Restriction2Lucene.java 2011-06-30 14:04:11 UTC (rev 1012) +++ trunk/wikitty-lucene/src/main/java/org/nuiton/wikitty/storage/lucene/Restriction2Lucene.java 2011-06-30 14:29:20 UTC (rev 1013) @@ -31,6 +31,7 @@ import org.apache.lucene.queryParser.ParseException; import org.apache.lucene.queryParser.QueryParser; import org.apache.lucene.search.BooleanClause; +import org.apache.lucene.search.BooleanClause.Occur; import org.apache.lucene.search.BooleanQuery; import org.apache.lucene.search.Query; import org.apache.lucene.search.TermQuery; @@ -227,15 +228,27 @@ * @return */ protected Query unlike2Lucene(Unlike restriction) { - throw new NotImplementedException("Not yet implemented"); + String field = element2Lucene(restriction.getElement(), true); + Term term = new Term(field, restriction.getValue()); + TermQuery query = new TermQuery(term); + BooleanQuery bQuery = new BooleanQuery(); + bQuery.add(query, Occur.MUST_NOT); + return bQuery; } /** - * @param restriction - * @return + * Like operator. + * + * @param restriction restriction + * @return lucene query + * @throws ParseException */ - protected Query like2Lucene(Like restriction) { - throw new NotImplementedException("Not yet implemented"); + protected Query like2Lucene(Like restriction) throws ParseException { + String field = element2Lucene(restriction.getElement(), true); + // il y a seulement besoin d'analyser la value + // pour la tokeniser + Query query = parser.parse(field + ":" + restriction.getValue()); + return query; } /** @@ -243,7 +256,10 @@ * @return */ protected Query end2Lucene(EndsWith restriction) { - throw new NotImplementedException("Not yet implemented"); + String field = element2Lucene(restriction.getElement()); + Term term = new Term(field, "*" + restriction.getValue()); + TermQuery query = new TermQuery(term); + return query; } /** @@ -251,7 +267,10 @@ * @return */ protected Query start2Lucene(StartsWith restriction) { - throw new NotImplementedException("Not yet implemented"); + String field = element2Lucene(restriction.getElement()); + Term term = new Term(field, restriction.getValue() + "*"); + TermQuery query = new TermQuery(term); + return query; } /** Modified: trunk/wikitty-lucene/src/test/java/org/nuiton/wikitty/storage/lucene/WikittySearchEngineLuceneTest.java =================================================================== --- trunk/wikitty-lucene/src/test/java/org/nuiton/wikitty/storage/lucene/WikittySearchEngineLuceneTest.java 2011-06-30 14:04:11 UTC (rev 1012) +++ trunk/wikitty-lucene/src/test/java/org/nuiton/wikitty/storage/lucene/WikittySearchEngineLuceneTest.java 2011-06-30 14:29:20 UTC (rev 1013) @@ -481,4 +481,30 @@ } } } + + /** + * Test des operateur speciaux sur les champs analyzés. + */ + @Test + public void testLuceneOperatorAnalyzed() { + WikittyTreeNode myLabel1 = new WikittyTreeNodeImpl(); + myLabel1.setName("ApPlE"); + + proxy.store(myLabel1); + + // keyword + Criteria criteria = Search.query().keyword("aPpLe").criteria(); + PagedResult<Wikitty> result = proxy.findAllByCriteria(criteria); + Assert.assertEquals(1, result.getNumFound()); + + // equals qui ne retourne rien + criteria = Search.query().eq(WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_NAME,"aPpLe").criteria(); + result = proxy.findAllByCriteria(criteria); + Assert.assertEquals(0, result.getNumFound()); + + // like + criteria = Search.query().like(WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_NAME,"aPpLe").criteria(); + result = proxy.findAllByCriteria(criteria); + Assert.assertEquals(1, result.getNumFound()); + } }