我希望使用Lucene.net在一堆shell文件中找到给定的文件名。这是我的索引构建方法:
public void BuildIndex(string dir, string pattern, Encoding enc = null)
{
if (!System.IO.Directory.Exists(dir)) {
throw new DirectoryNotFoundException(dir);
}
foreach (string file in System.IO.Directory.GetFiles(dir, pattern, SearchOption.AllDirectories)) {
foreach (var line in File.ReadAllLines(file, enc ?? Encoding.Default))
{
Document doc = new Document();
doc.Add(new Field("File", Path.GetFileName(file), Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.Add(new Field("LineText", line, Field.Store.YES, Field.Index.ANALYZED));
writer.AddDocument(doc);
}
if (FileIndexed != null) {
FileIndexed(file);
}
}
writer.Optimize();
writer.Dispose();
luceneIndexDirectory.Dispose();
}
BuildIndex
方法索引dir
目录中的所有shell文件,使用LukeNet我可以加载索引文件并执行一些查询。
当我使用A.FNTAQ01D
作为搜索表达式时,LukeNet和我的程序都可以找到这一行:
export MQRCV=$DD_PATH/DASD/A.FNTAQ01D
但不是这一行:
ASCC00464FSTEP140 OLD$DD_PATH/DASD/COMD89_A.FNTAQ01D
那是为什么?
(我使用StandardAnalyzer,也许我会想念它?)
答案 0 :(得分:1)
是的,标准分析器会为您创建第一行代码:
export
mqrcv
dd
path
dasd
a.fntaq01d
对于你的第二行:
ascc00464fstep140
old
dd
path
dasd/comd89_a.fntaq01d
在搜索时,A.FNTAQ01D
会转换为a.fntaq01d
,只会出现在您的第一行。