現在、ドキュメントのリストと個々のドキュメントをApache Lucene Indexに追加できます。しかし、私は、インデックスからドキュメントを更新中に問題に直面しています:apache Luceneでドキュメントを削除または更新するには
マインアプローチは、ファイルがアップロードされるとすぐに、ディスクに書き込む前に、私はファイルがドライブ/フォルダに存在するかどうかをチェックし、ファイル名に
第2に、アップロードしたファイルをLuceneインデックスに追加しています。
しかし、私が遭遇している問題は、新しく追加された文書と古い文書が両方とも異なる内容の検索結果に表示されていることです。例については
:ファイル名には、テキストとSample_One.txtです:
これが初めてサンプルテキストです。
上記のファイルをインデックスから削除してから、新しいファイルコンテンツをインデックスに追加した後。これは、更新されたコンテンツとサンプルテキストです
:
は今、ファイルの内容が同じファイル名を持つ別のテキストで更新されます。
「サンプル」のようないくつかのテキストを検索しながら、結果はSample_One.txtは、古いものと新しい内容で2回ファイル見せています。
私は何かが紛失していることと、文書をインデックスに更新/削除する方法を知りたいと思います。
コードスニペットは、次のとおりです。
//Deleting the Document from the Index
public void deleteDocumentsFromIndexUsingTerm(Document doc) throws IOException, ParseException {
Term fileTerm = new Term("file_name",doc.get("file_name"));
Term contentTerm = new Term("content", doc.get("content"));
Term docIDTerm = new Term("document_id", doc.get("document_id"));
File indexDir = new File(INDEX_DIRECTORY);
Directory directory = FSDirectory.open(indexDir.toPath());
Analyzer analyzer = new StandardAnalyzer();
IndexWriterConfig conf = new IndexWriterConfig(analyzer);
IndexWriter indexWriter = new IndexWriter(directory, conf);
System.out.println("Deleting the term with - "+doc.get("file_name"));
System.out.println("Deleting the term with contents - "+doc.get("content"));
indexWriter.deleteDocuments(fileTerm);
indexWriter.deleteDocuments(contentTerm);
indexWriter.deleteDocuments(docIDTerm);
indexWriter.commit();
indexWriter.close();
}
//スニペットが
final String INDEX_DIRECTORY = "D:\\Development\\Lucene_Indexer";
long startTime = System.currentTimeMillis();
List<ContentHandler> contentHandlerList = new ArrayList<ContentHandler>();
String fileNames = (String)request.getAttribute("message");
File file = new File("D:\\Development\\Resume_Sample\\"+fileNames);
ArrayList<File> fileList = new ArrayList<File>();
fileList.add(file);
Metadata metadata = new Metadata();
// BodyContentHandler set the value as -1 to evade the Text Limit Exception
ContentHandler handler = new BodyContentHandler(-1);
ParseContext context = new ParseContext();
Parser parser = new AutoDetectParser();
InputStream stream = new FileInputStream(file);
try {
parser.parse(stream, handler, metadata, context);
contentHandlerList.add(handler);
}catch (TikaException e) {
e.printStackTrace();
}catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
finally {
try {
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
FieldType fieldType = new FieldType();
fieldType.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS);
fieldType.setStoreTermVectors(true);
fieldType.setStoreTermVectorPositions(true);
fieldType.setStoreTermVectorPayloads(true);
fieldType.setStoreTermVectorOffsets(true);
fieldType.setStored(true);
Analyzer analyzer = new StandardAnalyzer();
Directory directory = FSDirectory.open(new File(INDEX_DIRECTORY).toPath());
IndexWriterConfig conf = new IndexWriterConfig(analyzer);
IndexWriter writer = new IndexWriter(directory, conf);
Iterator<ContentHandler> handlerIterator = contentHandlerList.iterator();
Iterator<File> fileIterator = fileList.iterator();
while (handlerIterator.hasNext() && fileIterator.hasNext()) {
Document doc = new Document();
String text = handlerIterator.next().toString();
String textFileName = fileIterator.next().getName();
String idOne = UUID.randomUUID().toString();
Field idField = new Field("document_id",idOne,fieldType);
Field fileNameField = new Field("file_name", textFileName, fieldType);
Field contentField = new Field("content",text,fieldType);
doc.add(idField);
doc.add(contentField);
doc.add(fileNameField);
writer.addDocument(doc);
analyzer.close();
}
writer.commit();
writer.deleteUnusedFiles();
long endTime = System.currentTimeMillis();
writer.close();
まず、私は更新された文書をインデックス化、その後のファイルがアップロードされるとすぐに文書を削除しています上のインデックスにドキュメントを追加します。
美しく機能しました。あなたの提案は、2回目の私のために働いていました。 – anand
こんにちは、luceneのAutoSuggestionに関するもう1つのトピックについて私を助けてください。質問stackoverflowリンクです:http:// stackoverflow。com/questions/39320279 /最初の検索後にlucene-in-first-search-iterationという自動提案 – anand