Here is the simplified code that causes problem (Lock obtain timed out). MyIndexer is used for indexing and searching. IndexTest starts 5 threads for indexing and 100 threads for searching.
MyIndexer.java public class MyIndexer { File m_IndexFile; IndexReader m_IndexReader; Directory m_Directory; Searcher m_Searcher; Analyzer m_Analyzer; ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); public MyIndexer(File a_IndexFile) throws IOException { m_IndexFile = a_IndexFile; m_Analyzer = new StandardAnalyzer(); m_Directory = FSDirectory.getDirectory(m_IndexFile, false); m_IndexReader = IndexReader.open(m_Directory); m_Searcher = new IndexSearcher(m_IndexReader); } public void addAndIndex(String a_Name) throws IOException { // lock.writeLock().lock(); try { IndexWriter indexWriter = new IndexWriter(m_Directory, m_Analyzer, false); Document doc = new Document(); doc.add(new Field("name", a_Name, Field.Store.YES, Field.Index.TOKENIZED)); indexWriter.addDocument(doc); indexWriter.optimize(); indexWriter.close(); } finally { // lock.writeLock().unlock(); } } public Hits search(String a_Query) { try { // lock.readLock().lock(); Query query = new QueryParser("name", m_Analyzer).parse(a_Query); Hits hits = m_Searcher.search(query); return hits; } catch (Exception e) { e.printStackTrace(); } finally { // lock.readLock().unlock(); } return null; } } IndexTest.java public class IndexTest extends Thread { private boolean m_DoIndex = true; static MyIndexer m_IndexEntity; public IndexTest(boolean a_DoIndex) { m_DoIndex = a_DoIndex; } public static void main(String[] args) throws Exception { m_IndexEntity = new MyIndexer(new File( "C:/mytest/myindex")); for (int i = 0; i < 5; i++) { new IndexTest(true).start(); } for (int i = 0; i < 100; i++) { new IndexTest(false).start(); } } @Override public void run() { for (int i = 0; i < 50; i++) { try { if (m_DoIndex) { String name = "Nick" + i; System.out.println("Add and Indexing..."); m_IndexEntity.addAndIndex(name); Thread.sleep(100); } else { System.out.println("Searching..."); m_IndexEntity.search("name:Nick" + i); Thread.sleep(20); } } catch (Exception e) { e.printStackTrace(); } } } } -- View this message in context: http://www.nabble.com/modify-existing-non-indexed-field-tf1905726.html#a5249234 Sent from the Lucene - Java Users forum at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]