-
-
Save madan712/4250486 to your computer and use it in GitHub Desktop.
| /* LuceneExample.java */ | |
| import java.io.File; | |
| import java.io.FileReader; | |
| import java.io.Reader; | |
| import org.apache.lucene.analysis.Analyzer; | |
| import org.apache.lucene.analysis.standard.StandardAnalyzer; | |
| import org.apache.lucene.document.Document; | |
| import org.apache.lucene.document.Field; | |
| import org.apache.lucene.index.IndexReader; | |
| import org.apache.lucene.index.IndexWriter; | |
| import org.apache.lucene.index.Term; | |
| import org.apache.lucene.index.IndexWriter.MaxFieldLength; | |
| import org.apache.lucene.queryParser.QueryParser; | |
| import org.apache.lucene.search.IndexSearcher; | |
| import org.apache.lucene.search.Query; | |
| import org.apache.lucene.search.TopDocs; | |
| import org.apache.lucene.store.Directory; | |
| import org.apache.lucene.store.FSDirectory; | |
| import org.apache.lucene.store.SimpleFSDirectory; | |
| import org.apache.lucene.util.Version; | |
| public class LuceneExample { | |
| public static final String files = "C:/TestLucene/files"; | |
| public static final String index = "C:/TestLucene/index"; | |
| public static void createIndex() { | |
| System.out.println("Creating index...."); | |
| Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30); | |
| try { | |
| // Store the index in file | |
| Directory directory = new SimpleFSDirectory(new File(index)); | |
| IndexWriter iwriter = new IndexWriter(directory, analyzer, true, | |
| MaxFieldLength.UNLIMITED); | |
| File dir = new File(files); | |
| File[] files = dir.listFiles(); | |
| int i = 1; | |
| for (File file : files) { | |
| System.out.println(file.getPath()); | |
| Document doc = new Document(); | |
| doc.add(new Field("id",""+i,Field.Store.YES,Field.Index.ANALYZED)); | |
| doc.add(new Field("path", file.getPath(), Field.Store.YES, | |
| Field.Index.ANALYZED)); | |
| Reader reader = new FileReader(file.getCanonicalPath()); | |
| doc.add(new Field("contents", reader)); | |
| iwriter.addDocument(doc); | |
| i++; | |
| } | |
| iwriter.optimize(); | |
| iwriter.close(); | |
| } catch (Exception e) { | |
| e.printStackTrace(); | |
| } | |
| } | |
| public static void searchIndex(String searchString) { | |
| System.out.println("Searching.... '" + searchString + "'"); | |
| try { | |
| IndexReader reader = IndexReader.open(FSDirectory.open(new File( | |
| index)), true); | |
| IndexSearcher searcher = new IndexSearcher(reader); | |
| Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30);// construct our usual analyzer | |
| QueryParser qp = new QueryParser(Version.LUCENE_30, "contents", | |
| analyzer); | |
| Query query = qp.parse(searchString); // parse the query and construct the Query object | |
| TopDocs hits = searcher.search(query, 100); // run the query | |
| if (hits.totalHits == 0) { | |
| System.out.println("No data found."); | |
| } else { | |
| for (int i = 0; i < hits.totalHits; i++) { | |
| Document doc = searcher.doc(hits.scoreDocs[i].doc); // get the next document | |
| String id = doc.get("id"); // get its id field | |
| String url = doc.get("path"); // get its path field | |
| System.out.println("Found in :: "+ id +" "+ url); | |
| } | |
| } | |
| } catch (Exception e) { | |
| e.printStackTrace(); | |
| } | |
| } | |
| public static void updateIndex(File newFile) { | |
| System.out.println("Updating index...."); | |
| Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30); | |
| try { | |
| // Store the index in file | |
| Directory directory = new SimpleFSDirectory(new File(index)); | |
| IndexWriter iwriter = new IndexWriter(directory, analyzer, false, | |
| MaxFieldLength.UNLIMITED); | |
| System.out.println(newFile.getPath()); | |
| Document doc = new Document(); | |
| //get max id | |
| IndexReader iReader = IndexReader.open(FSDirectory.open(new File(index)), true); | |
| int i = iReader.maxDoc(); | |
| i++; | |
| doc.add(new Field("id",""+i,Field.Store.YES,Field.Index.ANALYZED)); | |
| doc.add(new Field("path", newFile.getPath(), Field.Store.YES, | |
| Field.Index.ANALYZED)); | |
| Reader reader = new FileReader(newFile.getCanonicalPath()); | |
| doc.add(new Field("contents", reader)); | |
| iwriter.addDocument(doc); | |
| iwriter.optimize(); | |
| iwriter.close(); | |
| } catch (Exception e) { | |
| e.printStackTrace(); | |
| } | |
| } | |
| public static void deleteIndex(String id) { | |
| System.out.println("Deleting index...."+id); | |
| try { | |
| Term term = new Term("id", id); | |
| Directory directory = FSDirectory.open(new File(index)); | |
| IndexReader indexReader = IndexReader.open(directory, false); | |
| indexReader.deleteDocuments(term); | |
| indexReader.flush(); | |
| indexReader.close(); | |
| } | |
| catch (Exception e) { | |
| e.printStackTrace(); | |
| } | |
| } | |
| public static void main(String[] args) { | |
| createIndex(); | |
| searchIndex("Object"); | |
| updateIndex(new File("C:/TestLucene/newFiles/PHP.txt")); | |
| searchIndex("Object"); | |
| deleteIndex("2");//id to be deleted | |
| searchIndex("Object"); | |
| } | |
| } |
Hello. I use Lucene .Net version 2.9.4.1 in ASP.Net MVC 5. But I can't delete document from indexer. I Use WhitespaceAnalyzer for indexer. For add field to lucene document I use this code
var luceneDoc = new Document();
var fieldId = new NumericField("Id", Field.Store.YES, true);
fieldId.SetIntValue(2211);
luceneDoc.Add(fieldId);
Than I add document to indexer
private readonly Analyzer _whitespaceAnalyzer=new WhitespaceAnalyzer();
using (FSDirectory indexDirectory = FSDirectory.Open(new DirectoryInfo(indexLocationAbsolute)))
using (IndexWriter writer = new IndexWriter(indexDirectory, _whitespaceAnalyzer, IndexWriter.MaxFieldLength.UNLIMITED))
{
writer.AddDocument(document);
writer.Flush(false, true, true);
}
It's work good. I can search this document by "Id" for this query:
var query = NumericRangeQuery.NewIntRange("Id", id, id, true, true);
But I cant delete this document from indexer.
private readonly Analyzer _whitespaceAnalyzer=new WhitespaceAnalyzer();
using (FSDirectory indexDirectory = FSDirectory.Open(new DirectoryInfo(indexLocationAbsolute)))
using (IndexWriter writer = new IndexWriter(indexDirectory, _whitespaceAnalyzer, IndexWriter.MaxFieldLength.UNLIMITED))
{
var query = NumericRangeQuery.NewIntRange("Id", id, id, true, true);
writer.DeleteDocuments(query);
writer.Flush(false, true, true);
}
What a problem? Thanks!
issue with your updateIndex method you used add document method not update document method of index writer class
...