首页 新闻 会员 周边

lucence System.UnauthorizedAccessException异常

0
[已解决问题] 解决于 2012-06-21 16:50

最近想用lucene优化下站内搜索引擎,本地都没事,上传到空间后,在生成索引文件时出错了,错误信息如下:
System.IO.IOException: background merge hit exception: _1r:c300 _1s:c300 _1t:c300 _1u:c300 _1v:c300 _1w:c300 _1x:c300 _1y:c133 into _1z [optimize] [mergeDocStores] ---> System.UnauthorizedAccessException: Access to the path 'D:\www\web\2012330zhang2.com_2mk8pM0wDKEGJXWh8uy5\wwwroot\App_Data\LucenIndex\_1z.fnm' is denied. at Lucene.Net.Index.IndexWriter.HandleMergeException(Exception t, OneMerge merge) at Lucene.Net.Index.IndexWriter.Merge(OneMerge merge) at Lucene.Net.Index.ConcurrentMergeScheduler.DoMerge(OneMerge merge) at Lucene.Net.Index.ConcurrentMergeScheduler.MergeThread.Run() --- End of inner exception stack trace --- at Lucene.Net.Index.IndexWriter.Optimize(Int32 maxNumSegments, Boolean doWait) at Lucene.Net.Index.IndexWriter.Optimize(Boolean doWait) at Lucene.Net.Index.IndexWriter.Optimize() at Index.Close() in d:\www\web\2012330zhang2.com_2mk8pm0wdkegjxwh8uy5\wwwroot\App_Code\lucence.cs:line 167 at createLucenceIndex.createIndex() in d:\www\web\2012330zhang2.com_2mk8pm0wdkegjxwh8uy5\wwwroot\createLucenceIndex.aspx.cs:line 63 at createLucenceIndex.Page_Load(Object sender, EventArgs e) in d:\www\web\2012330zhang2.com_2mk8pm0wdkegjxwh8uy5\wwwroot\createLucenceIndex.aspx.cs:line 20
一开始以为是文件夹权限问题,我就在文件夹里用代码创建、修改、删除文件,结果都没问题。
最后发现,只要不调用IndexWriter.Merge方法,也就是不合并生成的索引文件,就没问题,出错的地方在于将之前生成的几个索引文件合并到新文件这一步,不知道有没有哪位大侠碰到过情况,或者能提供个解决思路的?

孤狼独啸的主页 孤狼独啸 | 菜鸟二级 | 园豆:208
提问于:2012-06-21 15:20
< >
分享
最佳答案
0

嘿嘿,解决了,把network service的write权限开起来就行了,之前被那服务商误导了,一直盯着iuser。

孤狼独啸 | 菜鸟二级 |园豆:208 | 2012-06-21 16:49

万分感激,我也遇到这个问题了,几个月一直没解决,今天按照你的方法终于解决了。

我用的是lucene.net。

错误代码:background merge hit exception: _22u:c50926 into _22v [optimize] [mergeDocStores]。

。! | 园豆:181 (初学一级) | 2012-09-18 09:39
其他回答(1)
0

从错误信息看是文件没权限:

Access to the path 'D:\www\web\2012330zhang2.com_2mk8pM0wDKEGJXWh8uy5\wwwroot\App_Data\LucenIndex\_1z.fnm' is denied

但你说不是权限的问题那就检查索引文件路径,你这里是放到了App_Data文件夹下,你直接放到网站根目录试试

artwl | 园豆:16736 (专家六级) | 2012-06-21 15:24

路径是没错的,LucenIndex这个文件是存在的,_1z.fnm这个文件是在合并过程中生成的。如果不进行索引文件合并的话,就没问题,一进行索引文件合并就出现这异常。

支持(0) 反对(0) 孤狼独啸 | 园豆:208 (菜鸟二级) | 2012-06-21 15:39

@孤狼独啸: 你不要把索引放在App_Data文件夹中,改到其他位置试试

支持(0) 反对(0) artwl | 园豆:16736 (专家六级) | 2012-06-21 15:47

@artwl: 把LucenIndex放到根目录还是一样。

支持(0) 反对(0) 孤狼独啸 | 园豆:208 (菜鸟二级) | 2012-06-21 15:52

@孤狼独啸: 网上看到的方案,你试一下:

本地调试通过的程序放到正式服务器上去的时候就出现了system.unauthorizedaccessexception 对路径”xxx”的访问被拒绝的问题。

本地操作系统是win7,服务器是win server 2003,程序是用lucene.net2.9(盘古分词器),.net framework 3.5开发的。

经过分析发现是程序lucene读取盘古分词的dict文件读取权限问题。

在web.config中加入 <identity impersonate=”true”/> 此段不起作用。

最终system.unauthorizedaccessexception 对路径的访问被拒绝的解决方法

给站点加上Authenticated Users用户运行的权限即可。

找到站点根目录|右键|安全|点击“添加”|点击“高级”|点击“立即查找”

选中“Authenticated Users”|确定|确定

在“修改”后面允许列的复选框上打个勾|确定。

来源:http://blog.jktutu.com/article/970.html

支持(0) 反对(0) artwl | 园豆:16736 (专家六级) | 2012-06-21 15:56

@artwl: 这些权限服务商全部不给,不是自己的服务器,只给了IUSER的读写权限。

支持(0) 反对(0) 孤狼独啸 | 园豆:208 (菜鸟二级) | 2012-06-21 16:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册