C# - Lucene搜索不适用于少数字符串文字

时间:2015-11-09 11:21:10

标签: c# .net apache lucene lucene.net

我们已经使用Apache lucene实现了搜索课程的搜索。它工作正常。但是,我有2条记录,即“Make it personnel”和“Do it right thing”。当我搜索“制造”“人员”时我得到的结果但是当我搜索“制作”时没有找到结果。但它适用于“做它”!我真的很困惑为什么它不适合“制造它”。 BTW查询解析器定义如下,

private readonly StandardAnalyzer _analyzer;
_analyzer = new StandardAnalyzer(Version.LUCENE_29);
var parser = new MultiFieldQueryParser(Version.LUCENE_29, new[] { "Name",     "Description", "Id" }, _analyzer);

var queryParser = parseQuery(BuildPrefixQuery(input), parser);

var hits = searcher.Search(queryParser, null, 50, Sort.RELEVANCE).ScoreDocs;

&安培;和索引创建代码是

public void CreateIndex(List<ILucenceProperties> ListILucenceProperties)
    {
var writer = new IndexWriter(_directory, _analyzer, true,     IndexWriter.MaxFieldLength.UNLIMITED);

        foreach (var iLucenceProperties in ListILucenceProperties)
        {
            var document = new Document();

            document.Add(new Field("Id", iLucenceProperties.Id, Field.Store.YES, Field.Index.ANALYZED));
            document.Add(new Field("Name", iLucenceProperties.Name, Field.Store.YES, Field.Index.ANALYZED));
            document.Add(new Field("Description", iLucenceProperties.Description, Field.Store.YES, Field.Index.ANALYZED));
            document.Add(new Field("Category", iLucenceProperties.Category, Field.Store.YES, Field.Index.NO));
            document.Add(new Field("FilterID", iLucenceProperties.FilterID, Field.Store.YES, Field.Index.NO));
            document.Add(new Field("ColumnName", iLucenceProperties.ColumnName, Field.Store.YES, Field.Index.NO));
            document.Add(new Field("AdditionalSearchParameter", iLucenceProperties.AdditionalSearchParameter, Field.Store.YES, Field.Index.NO));
            writer.AddDocument(document);
        }

        writer.Optimize();
        writer.Dispose();
    }

上面,“名称”字段包含名称当然,“Id”包含当然的ID,“描述”包含其他ID当然等等。

我认为问题可能出在解析器/分析器上。请帮帮我。

1 个答案:

答案 0 :(得分:0)

StandardAnalyzer过滤掉停用词,例如“it”。但是当您搜索时,请将“it”包含为关键字。您可以使用带有停用词列表的StandardAnalyzer constructor,并使用空集调用它。