最近在学习lucene碰到这样的问题,找不到解决的办法,想寻求高手指点。谢谢文件“e:\Index\_4.cfs”正由另一进程使用,因此该进程无法访问该文件。我把索引建在了e:\Index。在开始运行时,效果挺好,但运行第二次时,就出现了这个问题。下面是关于创建索引的代码:
 protected void Page_Load(object sender, EventArgs e)
    {
        //打开数据库表
        SqlDataReader myred = GetResult();
        //建立索引
        IndexWriter writer =Index(myred);
        
    }    /// <summary>
    /// 新建一个方法getResutl(String),它返回的是数据库表Authors的内容。
    /// </summary>
    /// <param name="sql"></param>
    /// <returns></returns>
    public SqlDataReader GetResult()
    {
        SqlDataReader myReader = null;
        try
        {
            string str = queryString.Text.Trim();
            string cmdText = "select * from Authors where city like '%" + str + "%'";
            SqlCommand myCommand = new SqlCommand(cmdText ,myConnection );
            myConnection.Open();
            myReader= myCommand.ExecuteReader();       
        }
        catch(SqlException e)
        {
            Response.Write(e);
        }
        return myReader;
    }
public Analyzer getAnalyzer()
    {
        return new StandardAnalyzer();
    }    /// <summary>
    /// 为数据库建立索引。
    /// </summary>
    /// <param name="myReader"></param>
    public IndexWriter Index(SqlDataReader myReader)
    {
        IndexWriter writer = new IndexWriter("e:/Index/", getAnalyzer(), true);
        try
        {   
            while(myReader.Read ())
            {
                Document doc=new Document();
                doc.Add(Field.Keyword("id", myReader["au_id"].ToString ()));
                doc.Add(Field.Text("name", myReader["au_name"].ToString ()));
                doc.Add(Field.UnIndexed("address", myReader["address"].ToString ()));
                doc.Add(Field.UnIndexed("phone", myReader["phone"].ToString ()));
                doc.Add(Field.Text("City", myReader["city"].ToString ()));
                writer.AddDocument(doc);
            }
            myReader.Close();
            myConnection.Close();
            writer.Optimize();
            writer.Close();
        }
      catch(SqlException e)
      {
          Response.Write(e);
      }
      return writer ;
    }