private void indexDocs(IndexWriter writer, File file) throws IOException {
		// do not try to index files that cannot be read
		if (file.canRead()) {
			if (file.isDirectory()) {
				String[] files = file.list();
				if (files != null) {
					for (int i = 0; i < files.length; i++) {
						indexDocs(writer, new File(file, files[i]));
					}
				}
			} else { // it is a file
				FileInputStream fis;
				try {
					fis = new FileInputStream(file);
				} catch (FileNotFoundException fnfe) {
					// at least on windows, some temporary files raise this exception with an "access denied" message
					// checking if the file can be read doesn't help
					return;
				}

				try {
					// make a new, empty document
					Document doc = new Document();

					// Add the path of the file as a field named "path". Use a field that is indexed (i.e. searchable),
					// but don't tokenize the field into separate words and don't index term frequency or positional information:
					String op_name = file.getName().replaceAll("<", "").replaceAll(">", "");
					doc.add(new StringField("path", file.getPath(), Field.Store.YES));
					doc.add(new StringField("op_name", op_name, Field.Store.YES));

					// Add the last modified date of the file a field named "modified".
					// Use a LongField that is indexed (i.e. efficiently filterable with NumericRangeFilter). This indexes to millisecond resolution, which
					// is often too fine. You could instead create a number based on year/month/day/hour/minutes/seconds, down the resolution you require.
					// For example the long value 2011021714 would mean February 17, 2011, 2-3 PM.
					doc.add(new LongField("modified", file.lastModified(), Field.Store.NO));

					// Add the contents of the file to a field named "contents".
					// Specify a Reader, so that the text of the file is tokenized and indexed, but not stored.
					// Note that FileReader expects the file to be in UTF-8 encoding.
					// If that's not the case searching for special characters will fail.
					doc.add(new TextField("op_desc", new BufferedReader(new InputStreamReader(fis, "UTF-8"))));
					double boost = default_doc_boost;
					if (m_oConfigPopularities.containsKey(op_name)) {
						boost = m_oConfigPopularities.get(op_name);
					} else if (m_oConfigPopularities.containsKey(op_name.toLowerCase())) {
						boost = m_oConfigPopularities.get(op_name.toLowerCase());
					}
					doc.add(new DoubleDocValuesField("boost", boost));
					if (writer.getConfig().getOpenMode() == IndexWriterConfig.OpenMode.CREATE) {
						// New index, so we just add the document (no old document can be there):
						writer.addDocument(doc);
					} else {
						// Existing index (an old copy of this document may have been indexed)
						// so we use updateDocument instead to replace the old one matching the exact path, if present:
						System.out.println("updating " + file);
						writer.updateDocument(new Term("path", file.getPath()),	doc);
					}
					
				} finally {
					fis.close();
				}
			}
		}
	}