lucene updateDocument不起作用

时间:2014-05-23 12:40:21

标签: lucene full-text-search

我正在使用Lucene 3.6。我想知道为什么更新不起作用。有什么不对吗?

public class TokenTest
{
    private static String IndexPath = "D:\\update\\index";

    private static Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_33);

    public static void main(String[] args) throws Exception
    {

        try
        {

            update();

            display("content", "content");

        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }

    @SuppressWarnings("deprecation")
    public static void display(String keyField, String words) throws Exception
    {
        IndexSearcher searcher = new IndexSearcher(FSDirectory.open(new File(IndexPath)));
        Term term = new Term(keyField, words);
        Query query = new TermQuery(term);
        TopDocs results = searcher.search(query, 100);

        ScoreDoc[] hits = results.scoreDocs;

        for (ScoreDoc hit : hits)
        {

            Document doc = searcher.doc(hit.doc);
            System.out.println("doc_id = " + hit.doc);
            System.out.println("内容: " + doc.get("content"));
            System.out.println("路径:" + doc.get("path"));

        }
    }

    public static String update() throws Exception
    {

        IndexWriterConfig writeConfig = new IndexWriterConfig(Version.LUCENE_33, analyzer);

        IndexWriter writer = new IndexWriter(FSDirectory.open(new File(IndexPath)), writeConfig);

        Document document = new Document();

        Field field_name2 = new Field("path", "update_path", Field.Store.YES, Field.Index.ANALYZED);
        Field field_content2 = new Field("content", "content update", Field.Store.YES, Field.Index.ANALYZED);

        document.add(field_name2);
        document.add(field_content2);

        Term term = new Term("path", "qqqqq");

        writer.updateDocument(term, document);
        writer.optimize();
        writer.close();
        return "update_path";
    }

}

1 个答案:

答案 0 :(得分:0)

我假设您要更新您的文档,以便该字段"路径" =" qqqq"。你完全倒退了( please read the documentation )。

updateDocument执行两个步骤:

  1. 查找并删除包含term的所有文件
    • 在这种情况下,找不到任何内容,因为您的索引文档不包含path:qqqq
  2. 将新的document添加到索引。
  3. 您似乎正在做相反的事情,尝试按文档查找,然后将该术语添加到其中,并且它不会以这种方式工作。我相信,你所寻找的是:

    Term term = new Term("content", "update");
    
    document.removeField("path");
    document.add("path", "qqqq");
    
    writer.updateDocument(term, document);