feat: initial commit
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
# `MaigoLabs.NeedLe`
|
||||
|
||||
Fuzzy search engine for small text pieces, with Chinese/Japanese pronunciation support.
|
||||
|
||||
See also [in-browser demo](https://needle.maigo.dev) (TypeScript version, but the same features as in C#).
|
||||
|
||||
## Install
|
||||
|
||||
```bash
|
||||
dotnet add package MaigoLabs.NeedLe
|
||||
```
|
||||
|
||||
Or install sub-packages separately:
|
||||
|
||||
```bash
|
||||
dotnet add package MaigoLabs.NeedLe.Indexer # For building indexes
|
||||
dotnet add package MaigoLabs.NeedLe.Searcher # For searching only
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
### Indexing
|
||||
|
||||
Indexing requires dictionaries. These are installed as dependencies of the `MaigoLabs.NeedLe.Indexer` package:
|
||||
|
||||
* MeCab.DotNet
|
||||
* OpenccNetLib
|
||||
* hyjiacan.pinyin4net
|
||||
|
||||
```csharp
|
||||
using MaigoLabs.NeedLe.Indexer;
|
||||
|
||||
var documents = new[] { "你好世界", "こんにちは" };
|
||||
var compressedIndex = InvertedIndexBuilder.BuildInvertedIndex(documents);
|
||||
// To customize dictionary paths, pass the second argument `TokenizerOptions` to `BuildInvertedIndex`.
|
||||
|
||||
// The built index could be stored for later use, or sent to frontend to load with TypeScript package `@maigolabs/needle`.
|
||||
// For compatibility with .NET Standard, we don't provide JSON related methods. You can use any JSON library to serialize/deserialize the index in the way you prefer.
|
||||
var json = JsonSerializer.Serialize(compressedIndex);
|
||||
```
|
||||
|
||||
### Searching
|
||||
|
||||
Searching requires a prebuilt index but doesn't require dictionaries. Searcher is a lightweight package without dependencies.
|
||||
|
||||
```csharp
|
||||
using MaigoLabs.NeedLe.Searcher;
|
||||
|
||||
// Index returned by `BuildInvertedIndex`.
|
||||
var index = InvertedIndexLoader.Load(compressedIndex);
|
||||
|
||||
var results = InvertedIndexSearcher.Search(index, "sekai");
|
||||
foreach (var result in results) Console.WriteLine($"{result.DocumentText} ({result.MatchRatio:P0})")
|
||||
// → 你好世界 (50%)
|
||||
```
|
||||
|
||||
To highlight the search result, see also `SearchResultHighlighter`.
|
||||
Reference in New Issue
Block a user