有没有办法在C#集合的内存中进行排名“全文搜索”?在任何给定的点上,我在集合中都有不到50个对象,我不介意它是否需要一秒钟才能完成。
有人知道那里的图书馆吗?
答案 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);