Kryptaesthesie
Erfahrenes Mitglied
Hallo zusammen,
ich versuche mich mit Lucene vertraut zu machen.
Mein erstes Ziel sollte sein, nach Dateien eines Verzeichnisses suchen zu können.
Also baue ich meinen Index so auf:
Der Index wird erstellt!
Dann folgt die Suche searchFiles();
Die hat folgenden Code:
Wenn ich jetzt
ausführe, bekomme ich aber immer nur
Sieht einer von euch einen Fehler im Code?
Wie gesagt, es geht mir nur um die Dateinamen, nicht um den Dateiinhalt!
Vielen Dank schon mal für eure Hilfe!
MfG Gerrit
ich versuche mich mit Lucene vertraut zu machen.
Mein erstes Ziel sollte sein, nach Dateien eines Verzeichnisses suchen zu können.
Also baue ich meinen Index so auf:
Code:
public class IndexCreator {
private Directory directory;
public IndexCreator() {
try {
this.directory = FSDirectory.getDirectory("D:\\Temp\\index");
} catch(IOException ioe) { ioe.printStackTrace(); }
buildIndex();
searchFiles();
}
public void buildIndex() {
IndexWriter writer = null;
try {
//writer = new IndexWriter(indexFile, new StandardAnalyzer(), true);
writer = new IndexWriter(directory, new StandardAnalyzer(), true);
Document doc = null;
File dir = new File("D:\\Temp");
for(File f : dir.listFiles()) {
doc = new Document();
Field field = new Field("file", f.getAbsolutePath(), Field.Store.YES, Field.Index.NO);
doc.add(field);
writer.addDocument(doc);
}
writer.optimize();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
...
Dann folgt die Suche searchFiles();
Die hat folgenden Code:
Code:
...
public void searchFiles() {
IndexSearcher searcher = null;
try {
searcher = new IndexSearcher(directory);
search(searcher, "icon");
searcher.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private void search(Searcher searcher, String queryString) throws ParseException, IOException {
// Build a Query object
QueryParser parser = new QueryParser("file", new StandardAnalyzer());
Query query = parser.parse(queryString);
// Search for the query
Hits hits = searcher.search(query);
// Examine the Hits object to see if there were any matches
int hitCount = hits.length();
if(hitCount == 0) {
System.out.println("No matches were found for \"" + queryString + "\"");
} else {
System.out.println("Hits for \"" + queryString + "\" were found in quotes by:");
// Iterate over the Documents in the Hits object
for(int i = 0; i < hitCount; i++) {
Document doc = hits.doc(i);
// Print the value that we stored in the "title" field. Note
// that this Field was not indexed, but (unlike the
// "contents" field) was stored verbatim and can be
// retrieved.
System.out.println(" " + (i + 1) + ". " + doc.get("file"));
}
}
System.out.println();
}
Code:
public static void main(String[] args) {
new IndexCreator(null);
}
als Ergebnis.No matches were found for "icon"
Sieht einer von euch einen Fehler im Code?
Wie gesagt, es geht mir nur um die Dateinamen, nicht um den Dateiinhalt!
Vielen Dank schon mal für eure Hilfe!
MfG Gerrit