redsky1982
14-07-2008, 14:21
Salve a tutti,
mi sono appena iscritta !!!
Vorrei chiedervi un consiglio: per un progetto all'uni devo fare delle ricerche per documenti simili e pensavo di utilizzare la classe di Lucene MoreLikeThis
Però non mi funziona affatto!
Posto il codice, magari qualcuno saprà darmi una risposta!
Io sono disperata sono 4 giorni che cerco in rete :mc:
public void searchBySimilarity(Searcher searcher, int oid) throws Exception {
FSDirectory dx = FSDirectory.getDirectory(new File("C:/repository.dx"));
FSDirectory rs = FSDirectory.getDirectory(new File("C:/repositorySearched.dx"));
IndexReader ir = IndexReader.open(dx);
IndexReader isc = IndexReader.open(rs);
IndexSearcher is = new IndexSearcher(dx);
MoreLikeThis morelt = new MoreLikeThis(isc);
RicettaFacade ricettaFacade = new RicettaFacade();
Ricetta ricetta = ricettaFacade.getRicetta(oid);
//creo il documento con la ricetta che ho
Document doc = new Document();
IndexWriter writer = new IndexWriter(rs, new MyAnalyzer(), true);
System.out.println(ricetta.getNome());
doc.add(new Field("nome", ricetta.getNome(), Field.Store.YES, Field.Index.TOKENIZED));
doc.add(new Field("descrizione", ricetta.getDescrizione(), Field.Store.YES, Field.Index.TOKENIZED));
doc.add(new Field("portata", ricetta.getPortata().toString(), Field.Store.YES, Field.Index.UN_TOKENIZED));
doc.add(new Field("costo", Double.toString(ricetta.getCosto()), Field.Store.YES, Field.Index.UN_TOKENIZED));
doc.add(new Field("voto", Integer.toString(ricetta.getVoto()), Field.Store.YES, Field.Index.UN_TOKENIZED));
doc.add(new Field("calorie", Integer.toString(ricetta.getCalorie()), Field.Store.YES, Field.Index.UN_TOKENIZED));
int id = ricetta.getOid();
IngredientiRicettaFacade getIngred = new IngredientiRicettaFacade();
ArrayList<IngredientiRicetta> ingredienti = getIngred.getIngredientiRicetta(id);
if (ingredienti != null) {
ListIterator it1 = ingredienti.listIterator();
while (it1.hasNext()) {
IngredientiRicetta ingrRic = (IngredientiRicetta) it1.next();
doc.add(new Field("ingrediente", ingrRic.getTipoingrediente(), Field.Store.YES, Field.Index.UN_TOKENIZED));
}
}
writer.addDocument(doc);
writer.close();
//fine creazione del documento
// lo ricerco con la ricerca per nome
searcher = new IndexSearcher(rs);
Hits hitsin= this.searchByNome(searcher, ricetta.getNome());
int idDoc = hitsin.id(0);
System.out.println("id documento: "+idDoc);
// Reader target = new StringReader("pasta");
Query query = morelt.like(idDoc);
morelt.setFieldNames(new String[]{"name","descrizione"});
morelt.setMinWordLen(1);
morelt.setAnalyzer(new MyAnalyzer());
morelt.setBoost(false);
System.out.println("la query è : "+query.toString());
Hits hits = searcher.search(query);
///////////////////
int trovati = hits.length();
if (trovati == 0) {
System.out.println("Nessun risultato per \"" + "pasta" + "\"");
}
else
{
System.out.println("Trovati risultati per \"" + "pasta" + "\" :");
for (int i = 0; i < trovati; i++) {
doc = hits.doc(i);
System.out.println(" " + (i + 1) + ". " + doc.get("nome"));
}
}
}
mi sono appena iscritta !!!
Vorrei chiedervi un consiglio: per un progetto all'uni devo fare delle ricerche per documenti simili e pensavo di utilizzare la classe di Lucene MoreLikeThis
Però non mi funziona affatto!
Posto il codice, magari qualcuno saprà darmi una risposta!
Io sono disperata sono 4 giorni che cerco in rete :mc:
public void searchBySimilarity(Searcher searcher, int oid) throws Exception {
FSDirectory dx = FSDirectory.getDirectory(new File("C:/repository.dx"));
FSDirectory rs = FSDirectory.getDirectory(new File("C:/repositorySearched.dx"));
IndexReader ir = IndexReader.open(dx);
IndexReader isc = IndexReader.open(rs);
IndexSearcher is = new IndexSearcher(dx);
MoreLikeThis morelt = new MoreLikeThis(isc);
RicettaFacade ricettaFacade = new RicettaFacade();
Ricetta ricetta = ricettaFacade.getRicetta(oid);
//creo il documento con la ricetta che ho
Document doc = new Document();
IndexWriter writer = new IndexWriter(rs, new MyAnalyzer(), true);
System.out.println(ricetta.getNome());
doc.add(new Field("nome", ricetta.getNome(), Field.Store.YES, Field.Index.TOKENIZED));
doc.add(new Field("descrizione", ricetta.getDescrizione(), Field.Store.YES, Field.Index.TOKENIZED));
doc.add(new Field("portata", ricetta.getPortata().toString(), Field.Store.YES, Field.Index.UN_TOKENIZED));
doc.add(new Field("costo", Double.toString(ricetta.getCosto()), Field.Store.YES, Field.Index.UN_TOKENIZED));
doc.add(new Field("voto", Integer.toString(ricetta.getVoto()), Field.Store.YES, Field.Index.UN_TOKENIZED));
doc.add(new Field("calorie", Integer.toString(ricetta.getCalorie()), Field.Store.YES, Field.Index.UN_TOKENIZED));
int id = ricetta.getOid();
IngredientiRicettaFacade getIngred = new IngredientiRicettaFacade();
ArrayList<IngredientiRicetta> ingredienti = getIngred.getIngredientiRicetta(id);
if (ingredienti != null) {
ListIterator it1 = ingredienti.listIterator();
while (it1.hasNext()) {
IngredientiRicetta ingrRic = (IngredientiRicetta) it1.next();
doc.add(new Field("ingrediente", ingrRic.getTipoingrediente(), Field.Store.YES, Field.Index.UN_TOKENIZED));
}
}
writer.addDocument(doc);
writer.close();
//fine creazione del documento
// lo ricerco con la ricerca per nome
searcher = new IndexSearcher(rs);
Hits hitsin= this.searchByNome(searcher, ricetta.getNome());
int idDoc = hitsin.id(0);
System.out.println("id documento: "+idDoc);
// Reader target = new StringReader("pasta");
Query query = morelt.like(idDoc);
morelt.setFieldNames(new String[]{"name","descrizione"});
morelt.setMinWordLen(1);
morelt.setAnalyzer(new MyAnalyzer());
morelt.setBoost(false);
System.out.println("la query è : "+query.toString());
Hits hits = searcher.search(query);
///////////////////
int trovati = hits.length();
if (trovati == 0) {
System.out.println("Nessun risultato per \"" + "pasta" + "\"");
}
else
{
System.out.println("Trovati risultati per \"" + "pasta" + "\" :");
for (int i = 0; i < trovati; i++) {
doc = hits.doc(i);
System.out.println(" " + (i + 1) + ". " + doc.get("nome"));
}
}
}