Preciso que o lucene recupere para min uma lista de alunos com os seguintes criterios :
- alunos do curso de computação ou enfermagem
- que fala sobre sistemas de informação
- que é do tipo aluno
a query que estou escrevendo é essa :
String query = " ( sistemas de informação ) AND ( ( CURSO:COMPUTACAO ) OR ( CURSO:ENFERMAGEM ) ) AND ( USER_TYPE:ALUNO )";
O problema que estou tendo, acredito, que é pq o lucene nao ta pesquisando pelos criterios curso e tip usuario.
Quando tento consultar assim :
String query = "( sistemas de informação ) AND ID:9 ";
Ele traz resultado.
O meu codigo de indexação esta abaixo :
Document document = new Document();
System.out.println("Iniciando Indexação Bloco-ID:"+bloco.getId());
Field idField = new Field("ID",bloco.getId().toString(),Field.Store.YES,Field.Index.NOT_ANALYZED);
document.add(idField);
Field userTypeField = new Field("USER_TYPE",bloco.getUserType().toString(),Field.Store.YES,Field.Index.NOT_ANALYZED);
document.add(userTypeField);
for (String curso : bloco.getCursos() ) {
Field cursoField = new Field("CURSO",curso,Field.Store.YES,Field.Index.NOT_ANALYZED);
document.add(cursoField);
}
Field textosField = new Field("conteudo",StringUtils.removerNaoLetras(bloco.getTextos().toString()),Field.Store.NO,Field.Index.ANALYZED);
document.add(textosField);
writer.addDocument(document);
O de busca :
String consulta = q;
Version v = Version.LUCENE_30;
File file = new File(INDEX_USR);
Directory directory = new SimpleFSDirectory(file);
IndexSearcher is = new IndexSearcher(directory);
Analyzer analyzer = new BrazilianAnalyzer(v);
QueryParser parser = new QueryParser(v, "conteudo", analyzer);
Query query = parser.parse(consulta);
long start = System.currentTimeMillis();
TopDocs hits = is.search(query, 10);
long end = System.currentTimeMillis();
System.err.println("Found " + hits.totalHits + " document(s) (in " + ( end - start) + " milliseconds) that matched query : \"" + q + "\"");
List<String> result = new ArrayList<String>();
for (int i = 0 ; i < hits.scoreDocs.length ; i++ ) {
ScoreDoc scoreDoc = hits.scoreDocs[0];
Document doc = is.doc(scoreDoc.doc);
result.add(doc.get("ID"));
}
is.close();
return result;
INDEX_USR é o diretorio onde guardo os indices.