Here's the code which I am implementing (Indexing and Searching codes are in different files)
Indexing Part : d=new Document(); File indexDir = new File("index-dir"); KeywordAnalyzer analyzer = new KeywordAnalyzer(); IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_31, analyzer); try { writer = new IndexWriter(FSDirectory.open(indexDir),conf); } catch (IOException e1) { e1.printStackTrace(); } String q1 = contract.getDocId(); String q2 = contract.getDocName(); String q3 = contract.getCustomer(ctx).getMemberName(); Term term = new Term("DocId",contract.getDocId()); writer.deleteDocuments(term); d.add(new Field("DocId",q1,Field.Store.YES,Field.Index.NOT_ANALYZED)); d.add(new Field("All",q2,Field.Store.NO,Field.Index.NOT_ANALYZED)); d.add(new Field("Cust",q3,Field.Store.NO,Field.Index.NOT_ANALYZED)); try { writer.addDocument(d); writer.close(); endTime = System.currentTimeMillis(); //System.out.println("Time taken to index the contract with DocID "+q1 +" is -> " +(endTime-startTime)); } catch (IOException e1) { e1.printStackTrace(); } Searching Code : File indexDir = new File("index-dir"); KeywordAnalyzer analyzer = new KeywordAnalyzer(); IndexSearcher searcher = null; searcher = new IndexSearcher(FSDirectory.open(indexDir)); String[] fields = new String[] { "DocId","Item","Cust","All"}; MultiFieldQueryParser parser = new MultiFieldQueryParser(Version.LUCENE_31,fields,analyzer); parser.setAllowLeadingWildcard(true); String queryString = field.getValue().toString(); TopDocs results = null; Query query1; query1 = parser.parse(queryString); results = searcher.search(query1,1000); System.out.println("total hits: " + results.totalHits); ScoreDoc[] hits = results.scoreDocs; Document doc = null; ArrayList docIds = new ArrayList(); for (ScoreDoc hit : hits) { doc = searcher.doc(hit.doc); System.out.println(doc.get("DocId")); ((ArrayList) docIds).add(doc.get("DocId")); } // Function which you need not to understand IMnCriterion criterion = contractQuery.createInCriterion(contractQuery.ATTR_P_DOC_ID, docIds); contractQuery.setCriterion(criterion); searcher.close(); }