Lucene的查询没有找到预期的结果

时间:2013-12-25 02:41:09

标签: c# lucene lucene.net

我希望使用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,也许我会想念它?)

1 个答案:

答案 0 :(得分:1)

是的,标准分析器会为您创建第一行代码:

export
mqrcv
dd
path
dasd
a.fntaq01d

对于你的第二行:

ascc00464fstep140
old
dd
path
dasd/comd89_a.fntaq01d

在搜索时,A.FNTAQ01D会转换为a.fntaq01d,只会出现在您的第一行。