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

本文关键字:数字 字符串 文字 适用于 搜索 不适用 C#-Lucene | 更新日期: 2023-09-27 18:21:07

我们已经使用Apache lucene实现了搜索课程。它运行良好。但是,我有两项记录,即"让它成为人员"answers"做正确的事"。当我搜索"make"personnel"时,我会得到结果,但当我搜索"make it"时,没有找到结果。但它与"动手"配合得很好!我真的很困惑,为什么它对"成功"不起作用。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();
    }

上面,"Name"字段包含课程名称,"Id"包含课程Id,"Description"包含课程另一个Id,依此类推

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

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

StandardAnalyzer过滤掉停止字,例如"it"。但当你搜索时,你会将"it"作为关键词。您可以使用StandardAnalyzer构造函数,该构造函数接受一个停止词列表,并使用空集调用它。