在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:DAXGRID/typesense-dotnet开源软件地址:https://github.com/DAXGRID/typesense-dotnet开源编程语言:C# 100.0%开源软件介绍:Typesense-dotnet.net client for Typesense. You can get the NuGet package here. Feel free to make issues or create pull requests if you find any bugs or there are missing features. SetupSetup in service collection so it can be dependency injected. The var provider = new ServiceCollection()
.AddTypesenseClient(config =>
{
config.ApiKey = "mysecretapikey";
config.Nodes = new List<Node>
{
new Node("localhost", "8108", "http")
};
}).BuildServiceProvider(); After that you can get it from the var typesenseClient = provider.GetService<ITypesenseClient>(); Create collectionWhen you create the collection, you can specify each field with var schema = new Schema(
"Addresses",
new List<Field>
{
new Field("id", FieldType.Int32, false),
new Field("houseNumber", FieldType.Int32, false),
new Field("accessAddress", FieldType.String, false, true),
new Field("metadataNotes", FieldType.String, false, true, false),
},
"houseNumber");
var createCollectionResult = await typesenseClient.CreateCollection(schema); The example uses public class Address
{
[JsonPropertyName("id")]
public string Id { get; set; }
[JsonPropertyName("house_number")]
public int HouseNumber { get; set; }
[JsonPropertyName("access_address")]
public string AccessAddress { get; set; }
[JsonPropertyName("metadata_notes")]
public string MetadataNotes { get; set; }
} Index documentvar address = new Address
{
Id = 1,
HouseNumber = 2,
AccessAddress = "Smedgade 25B"
};
var createDocumentResult = await typesenseClient.CreateDocument<Address>("Addresses", address); Upsert documentvar address = new Address
{
Id = 1,
HouseNumber = 2,
AccessAddress = "Smedgade 25B"
};
var upsertResult = await typesenseClient.UpsertDocument<Address>("Addresses", address); Search document in collectionvar query = new SearchParameters("Smed", "accessAddress");
var searchResult = await typesenseClient.Search<Address>("Addresses", query); Multi search documentsI haven't found a good way to implement multi-search in C#, because of the dynamic nature of the response. If you have any suggestion please open and issue. Until then, you can just start multiple var queryOne = new SearchParameters("Smed", "accessAddress");
var queryTwo = new SearchParameters("Potato", "accessAddress");
var searchResultTaskOne = typesenseClient.Search<Address>("Addresses", query);
var searchResultTaskTwo = typesenseClient.Search<Address>("Addresses", query);
var searchResultOne = await searchResultTaskOne;
var searchResultTwo = await searchResultTaskTwo; Retrieve a document on idvar retrievedDocument = await typesenseClient.RetrieveDocument<Address>("Addresses", "1"); Update document on idvar address = new Address
{
Id = 1,
HouseNumber = 2,
AccessAddress = "Smedgade 25B"
};
var updateDocumentResult = await typesenseClient.UpdateDocument<Address>("Addresses", "1", address); Delete document on idvar deleteResult = await typesenseClient.DeleteDocument<Address>("Addresses", "1"); Delete documents using filtervar deleteResult = await typesenseClient.DeleteDocuments("Addresses", "houseNumber:>=3", 100); Drop a collection on namevar deleteCollectionResult = await typesenseClient.DeleteCollection("Addresses"); Import documentsThe default batch size is var importDocumentResults = await typesenseClient.ImportDocuments<Address>("Addresses", addresses, 40, ImportType.Create); Export documentsvar addresses = await typesenseClient.ExportDocuments<Address>("Addresses"); Api keysCreate key
var apiKey = new Key(
"Example key one",
new[] { "*" },
new[] { "*" });
var createdKey = await typesenseClient.CreateKey(apiKey); Retrieve keyvar retrievedKey = await typesenseClient.RetrieveKey(0); List keysvar keys = await typesenseClient.ListKeys(); Delete keyvar deletedKey = await typesenseClient.DeleteKey(0); Generate Scoped Search keyvar scopedSearchKey = typesenseClient.GenerateScopedSearchKey("MainOrParentAPIKey", "{\"filter_by\":\"accessible_to_user_ids:2\"}"); CurationWhile Typesense makes it really easy and intuitive to deliver great search results, sometimes you might want to promote certain documents over others. Or, you might want to exclude certain documents from a query's result set. Using overrides, you can include or exclude specific documents for a given query. Upsertvar searchOverride = new SearchOverride(new List<Include> { new Include("2", 1) }, new Rule("Sul", "exact"));
var upsertSearchOverrideResponse = await typesenseClient.UpsertSearchOverride("Addresses", "addresses-override", searchOverride); List all overridesvar listSearchOverrides = await typesenseClient.ListSearchOverrides("Addresses"); Retrieve overridesvar retrieveSearchOverride = await typesenseClient.RetrieveSearchOverride("Addresses", "addresses-override"); Delete overridevar deletedSearchOverrideResult = await typesenseClient.DeleteSearchOverride("Addresses", "addresses-override"); Collection aliasAn alias is a virtual collection name that points to a real collection. Read more here. Upsert collection aliasvar upsertCollectionAlias = await typesenseClient.UpsertCollectionAlias("Address_Alias", new CollectionAlias("Addresses")); List all collection aliasesvar listCollectionAliases = await typesenseClient.ListCollectionAliases(); Retrieve collection aliasvar retrieveCollectionAlias = await typesenseClient.RetrieveCollectionAlias("Address_Alias"); Delete collection aliasvar deleteCollectionAlias = await typesenseClient.DeleteCollectionAlias("Addresses_Alias"); SynonymsThe synonyms feature allows you to define search terms that should be considered equivalent. For eg: when you define a synonym for sneaker as shoe, searching for sneaker will now return all records with the word shoe in them, in addition to records with the word sneaker. Read more here. Upsert synonymvar upsertSynonym = await typesenseClient.UpsertSynonym("Addresses", "Address_Synonym", new SynonymSchema(new List<string> { "Sultan", "Soltan", "Softan" })); Retrieve a synonymvar retrieveSynonym = await typesenseClient.RetrieveSynonym("Addresses", "Address_Synonym"); List all synonymsvar listSynonyms = await typesenseClient.ListSynonyms("Addresses"); Delete synonymvar deleteSynonym = await typesenseClient.DeleteSynonym("Addresses", "Address_Synonym"); Typesense API ErrorsTypesense API exceptions in the Typesense-api-errors spec.
TestsRunning all tests. dotnet test Running only unit testsdotnet test --filter Category=Unit Running integration testsdotnet test --filter Category=Integration To enable running integration tests you can run Typesense in a docker container using the command below. docker run -p 8108:8108 -v/tmp/data:/data typesense/typesense:0.22.2 --data-dir /data --api-key=key |
2022-08-15
2022-08-17
2022-09-23
2023-10-27
2022-08-18
请发表评论