Tom Kealy
Tom Kealy

Reputation: 2669

Ensuring the directory is open when using lucene

I'm trying to search an index I've created:

    File index = new File("C:/MyIndex");
    Directory indexDir = FSDirectory.open(index);
    StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_36);
    IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_36, analyzer);
    IndexWriter writer = new IndexWriter(indexDir, config); 

    Document doc = new Document();
    doc.add(new Field("My Data", Integer.toString(Id) , Field.Store.YES, Field.Index.NO));

indexDir.close();

Using Luke (the lucene index viewer) I can verify that the index exists and the data I enter is correct. My problem is how to check that the index is open (currently any searches of this index result in no matches):

    File indexDir = new File("C:/CustomerInnovation");
    Directory directory = FSDirectory.open(indexDir);
    IndexReader reader = IndexReader.open(directory);
    IndexSearcher searcher = new IndexSearcher(reader);
    Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_36);
    QueryParser parser = new QueryParser(Version.LUCENE_36, " ", new StandardAnalyzer(Version.LUCENE_36));
    Query query = parser.parse(searchQuery);
    log.debug("searchQuery: " + searchQuery);
    log.debug("query: " + query.toString());
    int hits = 100;
    int hitsPerPage = 10;
    TopScoreDocCollector collector = TopScoreDocCollector.create(hitsPerPage, true);
    searcher.search(query, collector);
    int returned = collector.topDocs().totalHits;
    log.debug("returned: " + returned);

    ScoreDoc[] numHits = collector.topDocs().scoreDocs;
    List<Document> results = new ArrayList<Document>();

    for (int i = 0; i < numHits.length; i++) {
        int docId = numHits[i].doc;
        Document d = searcher.doc(docId);
        results.add(d);
        log.debug(d.get("customername"));
    }

    log.debug("Found: " + numHits.length);

How do I check that the index has been opened and ready to search? I should mention that these bits of code are in separate classes.

Upvotes: 0

Views: 273

Answers (1)

Saqib
Saqib

Reputation: 1293

To check if index exists at a specified directory use indexExists method.

IndexReader.indexExists(directory)

Upvotes: 1

Related Questions