在C#集合上排名搜索

时间:2011-12-08 18:24:41

标签: c# .net algorithm full-text-search

有没有办法在C#集合的内存中进行排名“全文搜索”?在任何给定的点上,我在集合中都有不到50个对象,我不介意它是否需要一秒钟才能完成。

有人知道那里的图书馆吗?

2 个答案:

答案 0 :(得分:3)

结帐lucene.net。虽然它不会直接与您的集合集成,但您可以使用RAMDirectory将内容索引到内存中。

答案 1 :(得分:0)

您可以尝试库Bsa.Search.Core 该软件包在内存中实现了快速的对象搜索。

对象搜索- 您可以在其中创建对象列表并在内存中快速搜索它们

var selector = new IndexWordSelector();
var morphology = new DefaultMorphology(new WordDictionary(), selector);
var service = new HighlightObjectService(morphology);
service.AddRange(new HighlightObjectInfo[]
    {
        new HighlightObjectInfo()
        {
            StrongSynonyms = @"Elon Musk | E Musk | Elon M".Split('|').ToList(),
            Name = "Elon Musk",
            Id = "1",
            Type = ObjectType.Person,
            Weak = new HighlightObjectWeak()
            {
                WeakSearchContext = @"SpaceX | Tesla | Boring Company".Split('|').ToList(),
                WeakSynonyms = @"CEO| CTO | Founder | Musk | Elon |chief designer ".Split('|').ToList()
            }
        },
    });
var found = service.Search("Elon Musk. He is the founder, CEO, CTO and chief designer of SpaceX; early investor, CEO and product architect of Tesla, Inc. founder of The Boring Company");
//the service will find next object: Elon Musk|founder|CEO|CTO|CEO|founder

内存索引搜索:

 var field = "*";

 var query = "(\"Elon Musk\" | \"E Musk\" | \"Elon M\")|((SpaceX | Tesla | \"Boring Compan\") ~10 (CEO| CTO | Founder | Musk | Elon | \"chief designer))";

 var documentIndex = new MemoryDocumentIndex();
 var content = "Elon Musk. He is the founder, CEO, CTO and chief designer of SpaceX; early investor, CEO and product architect of Tesla, Inc. founder of The Boring Company";

 var searchService = new SearchServiceEngine(documentIndex);

 var doc = new IndexDocument("1");

 doc.Add("content".GetField(content));

 searchService.Index(new IndexDocument[]
 {
     doc
 });

 var parsed = query.Parse(field);


 var request = new SearchQueryRequest()
 {
      Query = parsed,
      Field = field,
      ShowHighlight = true,
      OrderField = SortOrderFields.Relevance,
      Order = SortOrder.Desc,
      Size = 20,
  };
        var result = searchService.Search(request);