如何在我的Lucene搜索代码上激活词干

本文关键字:代码 激活 词干 搜索 Lucene 我的 | 更新日期: 2023-09-27 18:25:56

有人能帮我激活代码的词干吗。尝试了很多但没有成功:(

我当前的代码

    Directory createIndex(DataTable table)
    {
        var directory = new RAMDirectory();
        using (Analyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30))
        using (var writer = new IndexWriter(directory, analyzer, new IndexWriter.MaxFieldLength(1000)))
        {
            foreach (DataRow row in table.Rows)
            {
                var document = new Document();
                document.Add(new Field("DishName", row["DishName"].ToString(), Field.Store.YES, Field.Index.ANALYZED));
                document.Add(new Field("CustomisationID", row["CustomisationID"].ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
                writer.AddDocument(document);
            }
            writer.Optimize();
            writer.Flush(true, true, true);
        }
        return directory;
    }
    private DataTable SearchDishName(string textSearch)
    {
        string MatchingCutomisationIDs = "0"; //There is no Dish with ID zero, this is just to easen the coding.. 
        var ds = new DataSet();
        ds.ReadXml(System.Web.HttpContext.Current.Server.MapPath("~/App_data/MyDataset.xml"));
        DataTable Sample = new DataTable();
        Sample = ds.Tables[0];
        var table = Sample.Clone();
        var Index = createIndex(Sample);
        using (var reader = IndexReader.Open(Index, true))
        using (var searcher = new IndexSearcher(reader))
        {
            using (Analyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30))
            {
                var queryParser = new QueryParser(Lucene.Net.Util.Version.LUCENE_30, "DishName", analyzer);
                var collector = TopScoreDocCollector.Create(1000, true);
                try
                {
                    var query = queryParser.Parse(textSearch);
                    searcher.Search(query, collector);
                }
                catch
                { }
                var matches = collector.TopDocs().ScoreDocs;
                foreach (var item in matches)
                {
                    var id = item.Doc;
                    var doc = searcher.Doc(id);
                    var row = table.NewRow();
                    row["CustomisationID"] = doc.GetField("CustomisationID").StringValue;
                    table.Rows.Add(row);
                }
            }
        }
        return table;
    }

如何在我的Lucene搜索代码上激活词干

StandardAnalyzer不包括词干。请改用SnowballAnalyzer。例如,对于英文文本:

Analyzer analyzer = new SnowballAnalyzer(Lucene.Net.Util.Version.LUCENE_30, "English")