Lucene indexWriter update does not affect Solr search

2015-04-07 Thread Ali Nazemian
I implement a small code for the purpose of extracting some keywords out of
Lucene index. I did implement that using search component. My problem is
when I tried to update Lucene IndexWriter, Solr index which is placed on
top of that, does not affect. As you can see I did the commit part.

BooleanQuery query = new BooleanQuery();
for (String fieldName : keywordSourceFields) {
  TermQuery termQuery = new TermQuery(new Term(fieldName,N/A));
  query.add(termQuery, Occur.MUST_NOT);
}
TermQuery termQuery=new TermQuery(new Term(keywordField, N/A));
query.add(termQuery, Occur.MUST);
try {
  //Query q= new QueryParser(keywordField, new
StandardAnalyzer()).parse(query.toString());
  TopDocs results = searcher.search(query,
  maxNumDocs);
  ScoreDoc[] hits = results.scoreDocs;
  IndexWriter writer = getLuceneIndexWriter(searcher.getPath());
  for (int i = 0; i  hits.length; i++) {
Document document = searcher.doc(hits[i].doc);
ListString keywords = keyword.getKeywords(hits[i].doc);
if(keywords.size()0) document.removeFields(keywordField);
for (String word : keywords) {
  document.add(new StringField(keywordField, word,
Field.Store.YES));
}
String uniqueKey =
searcher.getSchema().getUniqueKeyField().getName();
writer.updateDocument(new Term(uniqueKey,
document.get(uniqueKey)),
document);
  }
  writer.commit();
  writer.forceMerge(1);
  writer.close();
} catch (IOException | SyntaxError e) {
  throw new RuntimeException();
}

Please help me through solving this problem.

-- 
A.Nazemian


Re: Lucene indexWriter update does not affect Solr search

2015-04-07 Thread Upayavira
What are you trying to do? A search component is not intended for
updating the index, so it really doesn’t surprise me that you aren’t
seeing updates.

I’d suggest you describe the problem you are trying to solve before
proposing solutions.

Upayavira


On Tue, Apr 7, 2015, at 01:32 PM, Ali Nazemian wrote:
 I implement a small code for the purpose of extracting some keywords out
 of
 Lucene index. I did implement that using search component. My problem is
 when I tried to update Lucene IndexWriter, Solr index which is placed on
 top of that, does not affect. As you can see I did the commit part.
 
 BooleanQuery query = new BooleanQuery();
 for (String fieldName : keywordSourceFields) {
   TermQuery termQuery = new TermQuery(new Term(fieldName,N/A));
   query.add(termQuery, Occur.MUST_NOT);
 }
 TermQuery termQuery=new TermQuery(new Term(keywordField, N/A));
 query.add(termQuery, Occur.MUST);
 try {
   //Query q= new QueryParser(keywordField, new
 StandardAnalyzer()).parse(query.toString());
   TopDocs results = searcher.search(query,
   maxNumDocs);
   ScoreDoc[] hits = results.scoreDocs;
   IndexWriter writer = getLuceneIndexWriter(searcher.getPath());
   for (int i = 0; i  hits.length; i++) {
 Document document = searcher.doc(hits[i].doc);
 ListString keywords = keyword.getKeywords(hits[i].doc);
 if(keywords.size()0) document.removeFields(keywordField);
 for (String word : keywords) {
   document.add(new StringField(keywordField, word,
 Field.Store.YES));
 }
 String uniqueKey =
 searcher.getSchema().getUniqueKeyField().getName();
 writer.updateDocument(new Term(uniqueKey,
 document.get(uniqueKey)),
 document);
   }
   writer.commit();
   writer.forceMerge(1);
   writer.close();
 } catch (IOException | SyntaxError e) {
   throw new RuntimeException();
 }
 
 Please help me through solving this problem.
 
 -- 
 A.Nazemian


Re: Lucene indexWriter update does not affect Solr search

2015-04-07 Thread Ali Nazemian
I did some investigation and found out that the retrieving part of
documents works fine while Solr did not restarted. But the searching part
of documents did not work. After I restarted Solr it seems that the core
corrupted and failed to start! Here is the corresponding log:

org.apache.solr.common.SolrException: Error opening new searcher
at org.apache.solr.core.SolrCore.init(SolrCore.java:896)
at org.apache.solr.core.SolrCore.init(SolrCore.java:662)
at org.apache.solr.core.CoreContainer.create(CoreContainer.java:513)
at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:278)
at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:272)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)
Caused by: org.apache.solr.common.SolrException: Error opening new searcher
at org.apache.solr.core.SolrCore.openNewSearcher(SolrCore.java:1604)
at org.apache.solr.core.SolrCore.getSearcher(SolrCore.java:1716)
at org.apache.solr.core.SolrCore.init(SolrCore.java:868)
... 9 more
Caused by: org.apache.lucene.index.IndexNotFoundException: no
segments* file found in
NRTCachingDirectory(MMapDirectory@C:\Users\Ali\workspace\lucene_solr_5_0_0\solr\server\solr\document\data\index
lockFactory=org.apache.lucene.store.SimpleFSLockFactory@3bf76891;
maxCacheMB=48.0 maxMergeSizeMB=4.0): files: [_2_Lucene50_0.doc,
write.lock, _2_Lucene50_0.pos, _2.nvd, _2.fdt, _2_Lucene50_0.tim]
at org.apache.lucene.index.IndexWriter.init(IndexWriter.java:821)
at org.apache.solr.update.SolrIndexWriter.init(SolrIndexWriter.java:78)
at org.apache.solr.update.SolrIndexWriter.create(SolrIndexWriter.java:65)
at 
org.apache.solr.update.DefaultSolrCoreState.createMainIndexWriter(DefaultSolrCoreState.java:272)
at 
org.apache.solr.update.DefaultSolrCoreState.getIndexWriter(DefaultSolrCoreState.java:115)
at org.apache.solr.core.SolrCore.openNewSearcher(SolrCore.java:1573)
... 11 more

4/7/2015, 6:53:26 PM
ERROR
SolrIndexWriter
SolrIndexWriter was not closed prior to finalize(),​ indicates a bug
-- POSSIBLE RESOURCE LEAK!!!
4/7/2015, 6:53:26 PM
ERROR
SolrIndexWriter
Error closing IndexWriter
java.lang.NullPointerException
at org.apache.lucene.index.IndexWriter.doFlush(IndexWriter.java:2959)
at org.apache.lucene.index.IndexWriter.flush(IndexWriter.java:2927)
at org.apache.lucene.index.IndexWriter.shutdown(IndexWriter.java:965)
at org.apache.lucene.index.IndexWriter.close(IndexWriter.java:1010)
at org.apache.solr.update.SolrIndexWriter.close(SolrIndexWriter.java:130)
at org.apache.solr.update.SolrIndexWriter.finalize(SolrIndexWriter.java:183)
at java.lang.ref.Finalizer.invokeFinalizeMethod(Native Method)
at java.lang.ref.Finalizer.runFinalizer(Finalizer.java:101)
at java.lang.ref.Finalizer.access$100(Finalizer.java:32)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:190)

There for my guess would be problem with indexing the keywordField and also
problem related to closing the IndexWriter.

On Tue, Apr 7, 2015 at 6:13 PM, Ali Nazemian alinazem...@gmail.com wrote:

 Dear Upayavira,
 Hi,
 It is just the part of my code in which caused the problem. I know
 searchComponent is not for changing the index, but for the purpose of
 extracting document keywords I was forced to hack searchComponent for
 extracting keywords and putting them into index.
 For more information about why I chose searchComponent at the first place
 please follow this link:

 https://mail-archives.apache.org/mod_mbox/lucene-solr-user/201503.mbox/browser

 Best regards.


 On Tue, Apr 7, 2015 at 5:30 PM, Upayavira u...@odoko.co.uk wrote:

 What are you trying to do? A search component is not intended for
 updating the index, so it really doesn’t surprise me that you aren’t
 seeing updates.

 I’d suggest you describe the problem you are trying to solve before
 proposing solutions.

 Upayavira


 On Tue, Apr 7, 2015, at 01:32 PM, Ali Nazemian wrote:
  I implement a small code for the purpose of extracting some keywords out
  of
  Lucene index. I did implement that using search component. My problem is
  when I tried to update Lucene IndexWriter, Solr index which is placed on
  top of that, does not affect. As you can see I did the commit part.
 
  BooleanQuery query = new BooleanQuery();
  for (String fieldName : keywordSourceFields) {
TermQuery termQuery = new TermQuery(new
 Term(fieldName,N/A));
query.add(termQuery, Occur.MUST_NOT);
  }
  TermQuery termQuery=new TermQuery(new Term(keywordField,
 N/A));
  query.add(termQuery, Occur.MUST);
  try {
//Query q= new QueryParser(keywordField, new

Re: Lucene indexWriter update does not affect Solr search

2015-04-07 Thread Ali Nazemian
Dear Upayavira,
Hi,
It is just the part of my code in which caused the problem. I know
searchComponent is not for changing the index, but for the purpose of
extracting document keywords I was forced to hack searchComponent for
extracting keywords and putting them into index.
For more information about why I chose searchComponent at the first place
please follow this link:
https://mail-archives.apache.org/mod_mbox/lucene-solr-user/201503.mbox/browser

Best regards.


On Tue, Apr 7, 2015 at 5:30 PM, Upayavira u...@odoko.co.uk wrote:

 What are you trying to do? A search component is not intended for
 updating the index, so it really doesn’t surprise me that you aren’t
 seeing updates.

 I’d suggest you describe the problem you are trying to solve before
 proposing solutions.

 Upayavira


 On Tue, Apr 7, 2015, at 01:32 PM, Ali Nazemian wrote:
  I implement a small code for the purpose of extracting some keywords out
  of
  Lucene index. I did implement that using search component. My problem is
  when I tried to update Lucene IndexWriter, Solr index which is placed on
  top of that, does not affect. As you can see I did the commit part.
 
  BooleanQuery query = new BooleanQuery();
  for (String fieldName : keywordSourceFields) {
TermQuery termQuery = new TermQuery(new Term(fieldName,N/A));
query.add(termQuery, Occur.MUST_NOT);
  }
  TermQuery termQuery=new TermQuery(new Term(keywordField, N/A));
  query.add(termQuery, Occur.MUST);
  try {
//Query q= new QueryParser(keywordField, new
  StandardAnalyzer()).parse(query.toString());
TopDocs results = searcher.search(query,
maxNumDocs);
ScoreDoc[] hits = results.scoreDocs;
IndexWriter writer = getLuceneIndexWriter(searcher.getPath());
for (int i = 0; i  hits.length; i++) {
  Document document = searcher.doc(hits[i].doc);
  ListString keywords = keyword.getKeywords(hits[i].doc);
  if(keywords.size()0) document.removeFields(keywordField);
  for (String word : keywords) {
document.add(new StringField(keywordField, word,
  Field.Store.YES));
  }
  String uniqueKey =
  searcher.getSchema().getUniqueKeyField().getName();
  writer.updateDocument(new Term(uniqueKey,
  document.get(uniqueKey)),
  document);
}
writer.commit();
writer.forceMerge(1);
writer.close();
  } catch (IOException | SyntaxError e) {
throw new RuntimeException();
  }
 
  Please help me through solving this problem.
 
  --
  A.Nazemian




-- 
A.Nazemian