Cannot I search documents added by IndexWriter after commit?
@Test public void testUpdate() throws IOException, ParserConfigurationException, SAXException, ParseException { Analyzer analyzer = getAnalyzer(); QueryParser parser = new QueryParser(Version.LUCENE_32, content, analyzer); Query allQ = parser.parse(*:*); IndexWriter writer = getWriter(); IndexSearcher searcher = new IndexSearcher(IndexReader.open(writer, true)); TopDocs docs = searcher.search(allQ, 10); *assertEquals(0, docs.totalHits); // empty/no index* Document doc = getDoc(); writer.addDocument(doc); writer.commit(); docs = searcher.search(allQ, 10); *assertEquals(1,docs.totalHits); //it fails here. docs.totalHits equals 0* } What am I doing wrong here? If I initialize searcher with new IndexSearcher(directory) I'm told: org.apache.lucene.index.IndexNotFoundException: no segments* file found in org.apache.lucene.store.RAMDirectory@3caa4blockFactory=org.apache.lucene.store.SingleInstanceLockFactory@ed0220c: files: [] -- Regards, K. Gabriele --- unchanged since 20/9/10 --- P.S. If the subject contains [LON] or the addressee acknowledges the receipt within 48 hours then I don't resend the email. subject(this) ∈ L(LON*) ∨ ∃x. (x ∈ MyInbox ∧ Acknowledges(x, this) ∧ time(x) Now + 48h) ⇒ ¬resend(I, this). If an email is sent by a sender that is not a trusted contact or the email does not contain a valid code then the email is not received. A valid code starts with a hyphen and ends with X. ∀x. x ∈ MyInbox ⇒ from(x) ∈ MySafeSenderList ∨ (∃y. y ∈ subject(x) ∧ y ∈ L(-[a-z]+[0-9]X)).
Re: Cannot I search documents added by IndexWriter after commit?
After your writer.commit you need to reopen your searcher to see the changes. Mike McCandless http://blog.mikemccandless.com On Tue, Jul 5, 2011 at 1:48 PM, Gabriele Kahlout gabri...@mysimpatico.com wrote: @Test public void testUpdate() throws IOException, ParserConfigurationException, SAXException, ParseException { Analyzer analyzer = getAnalyzer(); QueryParser parser = new QueryParser(Version.LUCENE_32, content, analyzer); Query allQ = parser.parse(*:*); IndexWriter writer = getWriter(); IndexSearcher searcher = new IndexSearcher(IndexReader.open(writer, true)); TopDocs docs = searcher.search(allQ, 10); * assertEquals(0, docs.totalHits); // empty/no index* Document doc = getDoc(); writer.addDocument(doc); writer.commit(); docs = searcher.search(allQ, 10); * assertEquals(1,docs.totalHits); //it fails here. docs.totalHits equals 0* } What am I doing wrong here? If I initialize searcher with new IndexSearcher(directory) I'm told: org.apache.lucene.index.IndexNotFoundException: no segments* file found in org.apache.lucene.store.RAMDirectory@3caa4blockFactory=org.apache.lucene.store.SingleInstanceLockFactory@ed0220c: files: [] -- Regards, K. Gabriele --- unchanged since 20/9/10 --- P.S. If the subject contains [LON] or the addressee acknowledges the receipt within 48 hours then I don't resend the email. subject(this) ∈ L(LON*) ∨ ∃x. (x ∈ MyInbox ∧ Acknowledges(x, this) ∧ time(x) Now + 48h) ⇒ ¬resend(I, this). If an email is sent by a sender that is not a trusted contact or the email does not contain a valid code then the email is not received. A valid code starts with a hyphen and ends with X. ∀x. x ∈ MyInbox ⇒ from(x) ∈ MySafeSenderList ∨ (∃y. y ∈ subject(x) ∧ y ∈ L(-[a-z]+[0-9]X)).
Re: Cannot I search documents added by IndexWriter after commit?
and how do you do that? There is no reopen method On Tue, Jul 5, 2011 at 8:09 PM, Michael McCandless luc...@mikemccandless.com wrote: After your writer.commit you need to reopen your searcher to see the changes. Mike McCandless http://blog.mikemccandless.com On Tue, Jul 5, 2011 at 1:48 PM, Gabriele Kahlout gabri...@mysimpatico.com wrote: @Test public void testUpdate() throws IOException, ParserConfigurationException, SAXException, ParseException { Analyzer analyzer = getAnalyzer(); QueryParser parser = new QueryParser(Version.LUCENE_32, content, analyzer); Query allQ = parser.parse(*:*); IndexWriter writer = getWriter(); IndexSearcher searcher = new IndexSearcher(IndexReader.open(writer, true)); TopDocs docs = searcher.search(allQ, 10); *assertEquals(0, docs.totalHits); // empty/no index* Document doc = getDoc(); writer.addDocument(doc); writer.commit(); docs = searcher.search(allQ, 10); *assertEquals(1,docs.totalHits); //it fails here. docs.totalHits equals 0* } What am I doing wrong here? If I initialize searcher with new IndexSearcher(directory) I'm told: org.apache.lucene.index.IndexNotFoundException: no segments* file found in org.apache.lucene.store.RAMDirectory@3caa4blockFactory =org.apache.lucene.store.SingleInstanceLockFactory@ed0220c: files: [] -- Regards, K. Gabriele --- unchanged since 20/9/10 --- P.S. If the subject contains [LON] or the addressee acknowledges the receipt within 48 hours then I don't resend the email. subject(this) ∈ L(LON*) ∨ ∃x. (x ∈ MyInbox ∧ Acknowledges(x, this) ∧ time(x) Now + 48h) ⇒ ¬resend(I, this). If an email is sent by a sender that is not a trusted contact or the email does not contain a valid code then the email is not received. A valid code starts with a hyphen and ends with X. ∀x. x ∈ MyInbox ⇒ from(x) ∈ MySafeSenderList ∨ (∃y. y ∈ subject(x) ∧ y ∈ L(-[a-z]+[0-9]X)). -- Regards, K. Gabriele --- unchanged since 20/9/10 --- P.S. If the subject contains [LON] or the addressee acknowledges the receipt within 48 hours then I don't resend the email. subject(this) ∈ L(LON*) ∨ ∃x. (x ∈ MyInbox ∧ Acknowledges(x, this) ∧ time(x) Now + 48h) ⇒ ¬resend(I, this). If an email is sent by a sender that is not a trusted contact or the email does not contain a valid code then the email is not received. A valid code starts with a hyphen and ends with X. ∀x. x ∈ MyInbox ⇒ from(x) ∈ MySafeSenderList ∨ (∃y. y ∈ subject(x) ∧ y ∈ L(-[a-z]+[0-9]X)).
Re: Cannot I search documents added by IndexWriter after commit?
Sorry, you must reopen the underlying IndexReader, and then make a new IndexSearcher from the reopened reader. Mike McCandless http://blog.mikemccandless.com On Tue, Jul 5, 2011 at 2:12 PM, Gabriele Kahlout gabri...@mysimpatico.com wrote: and how do you do that? There is no reopen method On Tue, Jul 5, 2011 at 8:09 PM, Michael McCandless luc...@mikemccandless.com wrote: After your writer.commit you need to reopen your searcher to see the changes. Mike McCandless http://blog.mikemccandless.com On Tue, Jul 5, 2011 at 1:48 PM, Gabriele Kahlout gabri...@mysimpatico.com wrote: @Test public void testUpdate() throws IOException, ParserConfigurationException, SAXException, ParseException { Analyzer analyzer = getAnalyzer(); QueryParser parser = new QueryParser(Version.LUCENE_32, content, analyzer); Query allQ = parser.parse(*:*); IndexWriter writer = getWriter(); IndexSearcher searcher = new IndexSearcher(IndexReader.open(writer, true)); TopDocs docs = searcher.search(allQ, 10); * assertEquals(0, docs.totalHits); // empty/no index* Document doc = getDoc(); writer.addDocument(doc); writer.commit(); docs = searcher.search(allQ, 10); * assertEquals(1,docs.totalHits); //it fails here. docs.totalHits equals 0* } What am I doing wrong here? If I initialize searcher with new IndexSearcher(directory) I'm told: org.apache.lucene.index.IndexNotFoundException: no segments* file found in org.apache.lucene.store.RAMDirectory@3caa4blockFactory =org.apache.lucene.store.SingleInstanceLockFactory@ed0220c: files: [] -- Regards, K. Gabriele --- unchanged since 20/9/10 --- P.S. If the subject contains [LON] or the addressee acknowledges the receipt within 48 hours then I don't resend the email. subject(this) ∈ L(LON*) ∨ ∃x. (x ∈ MyInbox ∧ Acknowledges(x, this) ∧ time(x) Now + 48h) ⇒ ¬resend(I, this). If an email is sent by a sender that is not a trusted contact or the email does not contain a valid code then the email is not received. A valid code starts with a hyphen and ends with X. ∀x. x ∈ MyInbox ⇒ from(x) ∈ MySafeSenderList ∨ (∃y. y ∈ subject(x) ∧ y ∈ L(-[a-z]+[0-9]X)). -- Regards, K. Gabriele --- unchanged since 20/9/10 --- P.S. If the subject contains [LON] or the addressee acknowledges the receipt within 48 hours then I don't resend the email. subject(this) ∈ L(LON*) ∨ ∃x. (x ∈ MyInbox ∧ Acknowledges(x, this) ∧ time(x) Now + 48h) ⇒ ¬resend(I, this). If an email is sent by a sender that is not a trusted contact or the email does not contain a valid code then the email is not received. A valid code starts with a hyphen and ends with X. ∀x. x ∈ MyInbox ⇒ from(x) ∈ MySafeSenderList ∨ (∃y. y ∈ subject(x) ∧ y ∈ L(-[a-z]+[0-9]X)).
Re: Cannot I search documents added by IndexWriter after commit?
Still won't work (same as before). @Test public void testUpdate() throws IOException, ParserConfigurationException, SAXException, ParseException { Analyzer analyzer = getAnalyzer(); QueryParser parser = new QueryParser(Version.LUCENE_32, content, analyzer); Query allQ = parser.parse(*:*); IndexWriter writer = getWriter(); final IndexReader indexReader = IndexReader.open(writer, true); IndexSearcher searcher = new IndexSearcher(indexReader); TopDocs docs = searcher.search(allQ, 10); assertEquals(0, docs.totalHits); // empty/no index Document doc = getDoc(); writer.addDocument(doc); writer.commit(); *indexReader.reopen(); searcher = new IndexSearcher(indexReader); docs = searcher.search(allQ, 10);* assertEquals(1,docs.totalHits); } private Document getDoc() { Document doc = new Document(); doc.add(new Field(id, 0, Field.Store.YES, Field.Index.NOT_ANALYZED)); return doc; } private IndexWriter getWriter() throws IOException {// 2 return new IndexWriter(directory, new WhitespaceAnalyzer(), // 2 IndexWriter.MaxFieldLength.UNLIMITED); // 2 } On Tue, Jul 5, 2011 at 8:15 PM, Michael McCandless luc...@mikemccandless.com wrote: Sorry, you must reopen the underlying IndexReader, and then make a new IndexSearcher from the reopened reader. Mike McCandless http://blog.mikemccandless.com On Tue, Jul 5, 2011 at 2:12 PM, Gabriele Kahlout gabri...@mysimpatico.com wrote: and how do you do that? There is no reopen method On Tue, Jul 5, 2011 at 8:09 PM, Michael McCandless luc...@mikemccandless.com wrote: After your writer.commit you need to reopen your searcher to see the changes. Mike McCandless http://blog.mikemccandless.com On Tue, Jul 5, 2011 at 1:48 PM, Gabriele Kahlout gabri...@mysimpatico.com wrote: @Test public void testUpdate() throws IOException, ParserConfigurationException, SAXException, ParseException { Analyzer analyzer = getAnalyzer(); QueryParser parser = new QueryParser(Version.LUCENE_32, content, analyzer); Query allQ = parser.parse(*:*); IndexWriter writer = getWriter(); IndexSearcher searcher = new IndexSearcher(IndexReader.open(writer, true)); TopDocs docs = searcher.search(allQ, 10); *assertEquals(0, docs.totalHits); // empty/no index* Document doc = getDoc(); writer.addDocument(doc); writer.commit(); docs = searcher.search(allQ, 10); *assertEquals(1,docs.totalHits); //it fails here. docs.totalHits equals 0* } What am I doing wrong here? If I initialize searcher with new IndexSearcher(directory) I'm told: org.apache.lucene.index.IndexNotFoundException: no segments* file found in org.apache.lucene.store.RAMDirectory@3caa4blockFactory =org.apache.lucene.store.SingleInstanceLockFactory@ed0220c: files: [] -- Regards, K. Gabriele --- unchanged since 20/9/10 --- P.S. If the subject contains [LON] or the addressee acknowledges the receipt within 48 hours then I don't resend the email. subject(this) ∈ L(LON*) ∨ ∃x. (x ∈ MyInbox ∧ Acknowledges(x, this) ∧ time(x) Now + 48h) ⇒ ¬resend(I, this). If an email is sent by a sender that is not a trusted contact or the email does not contain a valid code then the email is not received. A valid code starts with a hyphen and ends with X. ∀x. x ∈ MyInbox ⇒ from(x) ∈ MySafeSenderList ∨ (∃y. y ∈ subject(x) ∧ y ∈ L(-[a-z]+[0-9]X)). -- Regards, K. Gabriele --- unchanged since 20/9/10 --- P.S. If the subject contains [LON] or the addressee acknowledges the receipt within 48 hours then I don't resend the email. subject(this) ∈ L(LON*) ∨ ∃x. (x ∈ MyInbox ∧ Acknowledges(x, this) ∧ time(x) Now + 48h) ⇒ ¬resend(I, this). If an email is sent by a sender that is not a trusted contact or the email does not contain a valid code then the email is not received. A valid code starts with a hyphen and ends with X. ∀x. x ∈ MyInbox ⇒ from(x) ∈ MySafeSenderList ∨ (∃y. y ∈ subject(x) ∧ y ∈ L(-[a-z]+[0-9]X)). -- Regards, K. Gabriele --- unchanged since 20/9/10 --- P.S. If the subject contains [LON] or the addressee acknowledges the receipt within 48 hours then I don't resend the email. subject(this) ∈ L(LON*) ∨ ∃x. (x ∈ MyInbox ∧ Acknowledges(x, this) ∧ time(x) Now + 48h) ⇒ ¬resend(I, this). If an email is sent by a sender that is not a trusted contact or the email does not contain a valid code then the email is not received. A valid code starts with a hyphen and ends with X. ∀x. x ∈ MyInbox ⇒ from(x) ∈ MySafeSenderList ∨ (∃y. y ∈ subject(x) ∧ y ∈ L(-[a-z]+[0-9]X)).
Re: Cannot I search documents added by IndexWriter after commit?
Re-open doens't work, but open does. @Test public void testUpdate() throws IOException, ParserConfigurationException, SAXException, ParseException { Analyzer analyzer = getAnalyzer(); QueryParser parser = new QueryParser(Version.LUCENE_32, content, analyzer); Query allQ = parser.parse(*:*); IndexWriter writer = getWriter(); final IndexReader indexReader = IndexReader.open(writer, true); IndexSearcher searcher = new IndexSearcher(indexReader); TopDocs docs = searcher.search(allQ, 10); assertEquals(0, docs.totalHits); // empty/no index Document doc = getDoc(); writer.addDocument(doc); writer.commit(); searcher = new IndexSearcher(IndexReader.open(writer, true));//new IndexSearcher(directory); docs = searcher.search(allQ, 10); assertEquals(1, docs.totalHits); } On Tue, Jul 5, 2011 at 8:23 PM, Gabriele Kahlout gabri...@mysimpatico.comwrote: Still won't work (same as before). @Test public void testUpdate() throws IOException, ParserConfigurationException, SAXException, ParseException { Analyzer analyzer = getAnalyzer(); QueryParser parser = new QueryParser(Version.LUCENE_32, content, analyzer); Query allQ = parser.parse(*:*); IndexWriter writer = getWriter(); final IndexReader indexReader = IndexReader.open(writer, true); IndexSearcher searcher = new IndexSearcher(indexReader); TopDocs docs = searcher.search(allQ, 10); assertEquals(0, docs.totalHits); // empty/no index Document doc = getDoc(); writer.addDocument(doc); writer.commit(); *indexReader.reopen(); searcher = new IndexSearcher(indexReader); docs = searcher.search(allQ, 10); * assertEquals(1,docs.totalHits); } private Document getDoc() { Document doc = new Document(); doc.add(new Field(id, 0, Field.Store.YES, Field.Index.NOT_ANALYZED)); return doc; } private IndexWriter getWriter() throws IOException {// 2 return new IndexWriter(directory, new WhitespaceAnalyzer(), // 2 IndexWriter.MaxFieldLength.UNLIMITED); // 2 } On Tue, Jul 5, 2011 at 8:15 PM, Michael McCandless luc...@mikemccandless.com wrote: Sorry, you must reopen the underlying IndexReader, and then make a new IndexSearcher from the reopened reader. Mike McCandless http://blog.mikemccandless.com On Tue, Jul 5, 2011 at 2:12 PM, Gabriele Kahlout gabri...@mysimpatico.com wrote: and how do you do that? There is no reopen method On Tue, Jul 5, 2011 at 8:09 PM, Michael McCandless luc...@mikemccandless.com wrote: After your writer.commit you need to reopen your searcher to see the changes. Mike McCandless http://blog.mikemccandless.com On Tue, Jul 5, 2011 at 1:48 PM, Gabriele Kahlout gabri...@mysimpatico.com wrote: @Test public void testUpdate() throws IOException, ParserConfigurationException, SAXException, ParseException { Analyzer analyzer = getAnalyzer(); QueryParser parser = new QueryParser(Version.LUCENE_32, content, analyzer); Query allQ = parser.parse(*:*); IndexWriter writer = getWriter(); IndexSearcher searcher = new IndexSearcher(IndexReader.open(writer, true)); TopDocs docs = searcher.search(allQ, 10); *assertEquals(0, docs.totalHits); // empty/no index* Document doc = getDoc(); writer.addDocument(doc); writer.commit(); docs = searcher.search(allQ, 10); *assertEquals(1,docs.totalHits); //it fails here. docs.totalHits equals 0* } What am I doing wrong here? If I initialize searcher with new IndexSearcher(directory) I'm told: org.apache.lucene.index.IndexNotFoundException: no segments* file found in org.apache.lucene.store.RAMDirectory@3caa4blockFactory =org.apache.lucene.store.SingleInstanceLockFactory@ed0220c: files: [] -- Regards, K. Gabriele --- unchanged since 20/9/10 --- P.S. If the subject contains [LON] or the addressee acknowledges the receipt within 48 hours then I don't resend the email. subject(this) ∈ L(LON*) ∨ ∃x. (x ∈ MyInbox ∧ Acknowledges(x, this) ∧ time(x) Now + 48h) ⇒ ¬resend(I, this). If an email is sent by a sender that is not a trusted contact or the email does not contain a valid code then the email is not received. A valid code starts with a hyphen and ends with X. ∀x. x ∈ MyInbox ⇒ from(x) ∈ MySafeSenderList ∨ (∃y. y ∈ subject(x) ∧ y ∈ L(-[a-z]+[0-9]X)). -- Regards, K. Gabriele --- unchanged since 20/9/10 --- P.S. If the subject contains [LON] or the addressee acknowledges the receipt within 48 hours then I don't resend the email. subject(this) ∈ L(LON*) ∨ ∃x. (x ∈ MyInbox ∧ Acknowledges(x, this)
Re: Cannot I search documents added by IndexWriter after commit?
re-open does work, but you cannot ignore its return value! see the javadocs for an example. On Tue, Jul 5, 2011 at 3:10 PM, Gabriele Kahlout gabri...@mysimpatico.com wrote: Re-open doens't work, but open does. @Test public void testUpdate() throws IOException, ParserConfigurationException, SAXException, ParseException { Analyzer analyzer = getAnalyzer(); QueryParser parser = new QueryParser(Version.LUCENE_32, content, analyzer); Query allQ = parser.parse(*:*); IndexWriter writer = getWriter(); final IndexReader indexReader = IndexReader.open(writer, true); IndexSearcher searcher = new IndexSearcher(indexReader); TopDocs docs = searcher.search(allQ, 10); assertEquals(0, docs.totalHits); // empty/no index Document doc = getDoc(); writer.addDocument(doc); writer.commit(); searcher = new IndexSearcher(IndexReader.open(writer, true));//new IndexSearcher(directory); docs = searcher.search(allQ, 10); assertEquals(1, docs.totalHits); } On Tue, Jul 5, 2011 at 8:23 PM, Gabriele Kahlout gabri...@mysimpatico.comwrote: Still won't work (same as before). @Test public void testUpdate() throws IOException, ParserConfigurationException, SAXException, ParseException { Analyzer analyzer = getAnalyzer(); QueryParser parser = new QueryParser(Version.LUCENE_32, content, analyzer); Query allQ = parser.parse(*:*); IndexWriter writer = getWriter(); final IndexReader indexReader = IndexReader.open(writer, true); IndexSearcher searcher = new IndexSearcher(indexReader); TopDocs docs = searcher.search(allQ, 10); assertEquals(0, docs.totalHits); // empty/no index Document doc = getDoc(); writer.addDocument(doc); writer.commit(); * indexReader.reopen(); searcher = new IndexSearcher(indexReader); docs = searcher.search(allQ, 10); * assertEquals(1,docs.totalHits); } private Document getDoc() { Document doc = new Document(); doc.add(new Field(id, 0, Field.Store.YES, Field.Index.NOT_ANALYZED)); return doc; } private IndexWriter getWriter() throws IOException { // 2 return new IndexWriter(directory, new WhitespaceAnalyzer(), // 2 IndexWriter.MaxFieldLength.UNLIMITED); // 2 } On Tue, Jul 5, 2011 at 8:15 PM, Michael McCandless luc...@mikemccandless.com wrote: Sorry, you must reopen the underlying IndexReader, and then make a new IndexSearcher from the reopened reader. Mike McCandless http://blog.mikemccandless.com On Tue, Jul 5, 2011 at 2:12 PM, Gabriele Kahlout gabri...@mysimpatico.com wrote: and how do you do that? There is no reopen method On Tue, Jul 5, 2011 at 8:09 PM, Michael McCandless luc...@mikemccandless.com wrote: After your writer.commit you need to reopen your searcher to see the changes. Mike McCandless http://blog.mikemccandless.com On Tue, Jul 5, 2011 at 1:48 PM, Gabriele Kahlout gabri...@mysimpatico.com wrote: @Test public void testUpdate() throws IOException, ParserConfigurationException, SAXException, ParseException { Analyzer analyzer = getAnalyzer(); QueryParser parser = new QueryParser(Version.LUCENE_32, content, analyzer); Query allQ = parser.parse(*:*); IndexWriter writer = getWriter(); IndexSearcher searcher = new IndexSearcher(IndexReader.open(writer, true)); TopDocs docs = searcher.search(allQ, 10); * assertEquals(0, docs.totalHits); // empty/no index* Document doc = getDoc(); writer.addDocument(doc); writer.commit(); docs = searcher.search(allQ, 10); * assertEquals(1,docs.totalHits); //it fails here. docs.totalHits equals 0* } What am I doing wrong here? If I initialize searcher with new IndexSearcher(directory) I'm told: org.apache.lucene.index.IndexNotFoundException: no segments* file found in org.apache.lucene.store.RAMDirectory@3caa4blockFactory =org.apache.lucene.store.SingleInstanceLockFactory@ed0220c: files: [] -- Regards, K. Gabriele --- unchanged since 20/9/10 --- P.S. If the subject contains [LON] or the addressee acknowledges the receipt within 48 hours then I don't resend the email. subject(this) ∈ L(LON*) ∨ ∃x. (x ∈ MyInbox ∧ Acknowledges(x, this) ∧ time(x) Now + 48h) ⇒ ¬resend(I, this). If an email is sent by a sender that is not a trusted contact or the email does not contain a valid code then the email is not received. A valid code starts with a hyphen and ends with X. ∀x. x ∈ MyInbox ⇒ from(x) ∈ MySafeSenderList ∨ (∃y. y ∈ subject(x) ∧ y ∈ L(-[a-z]+[0-9]X)). -- Regards, K. Gabriele --- unchanged since 20/9/10 --- P.S. If the