c#集合的排序搜索

本文关键字:搜索 排序 集合 | 更新日期: 2023-09-27 18:17:21

是否有一种方法可以在c#集合的内存中进行排名"全文搜索"?在任何给定的时间点,我的收藏对象都在50个以下,我不介意是否需要一秒钟才能完成。

有谁知道有图书馆吗?

c#集合的排序搜索

查看lucene.net。虽然它不会直接与您的集合集成,但您可以使用RAMDirectory对内存中的内容进行索引。

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

  • 。网络核心
  • 。净472

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

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