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

时间:2015-12-07 15:39:11

标签: c# lucene lucene.net stemming

有人可以帮助激活我的代码上的词干。试了很多但没有太大的成功:(

我目前的代码

    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;
    }

1 个答案:

答案 0 :(得分:1)

members.sort_by!(&:last_name) 不包括词干。请改用SnowballAnalyzer。例如,对于英文文本:

StandardAnalyzer