typesense go
v2.0.0
Typesense API 的 Go 用戶端:https://github.com/typesense/typesense
go get github.com/typesense/typesense-go/v2/typesense
將包匯入到您的程式碼:
import "github.com/typesense/typesense-go/v2/typesense"
建立新客戶端:
client := typesense . NewClient (
typesense . WithServer ( "http://localhost:8108" ),
typesense . WithAPIKey ( "<API_KEY>" ))
具有進階配置選項的新客戶端(請參閱 godoc):
client := typesense . NewClient (
typesense . WithServer ( "http://localhost:8108" ),
typesense . WithAPIKey ( "<API_KEY>" ),
typesense . WithConnectionTimeout ( 5 * time . Second ),
typesense . WithCircuitBreakerMaxRequests ( 50 ),
typesense . WithCircuitBreakerInterval ( 2 * time . Minute ),
typesense . WithCircuitBreakerTimeout ( 1 * time . Minute ),
)
具有多節點配置選項的新客戶端:
client := typesense . NewClient (
typesense . WithNearestNode ( "https://xxx.a1.typesense.net:443" ),
typesense . WithNodes ([] string {
"https://xxx-1.a1.typesense.net:443" ,
"https://xxx-2.a1.typesense.net:443" ,
"https://xxx-3.a1.typesense.net:443" ,
}),
typesense . WithAPIKey ( "<API_KEY>" ),
typesense . WithNumRetries ( 5 ),
typesense . WithRetryInterval ( 1 * time . Second ),
typesense . WithHealthcheckInterval ( 2 * time . Minute ),
)
您還可以在整合測試中找到一些範例。
schema := & api. CollectionSchema {
Name : "companies" ,
Fields : []api. Field {
{
Name : "company_name" ,
Type : "string" ,
},
{
Name : "num_employees" ,
Type : "int32" ,
},
{
Name : "country" ,
Type : "string" ,
Facet : true ,
},
},
DefaultSortingField : pointer . String ( "num_employees" ),
}
client . Collections (). Create ( context . Background (), schema )
在v2.0.0
+ 中,用戶端可讓您定義文件結構以用於某些文件操作的類型。
為此,您必須使用typesense.GenericCollection
:
type companyDocument struct {
ID string `json:"id"`
CompanyName string `json:"company_name"`
NumEmployees int `json:"num_employees"`
Country string `json:"country"`
}
// doc is a typed document
doc , err := typesense . GenericCollection [ * companyDocument ]( typesenseClient , collectionName ). Document ( "123" ). Retrieve ( context . Background ())
document := struct {
ID string `json:"id"`
CompanyName string `json:"company_name"`
NumEmployees int `json:"num_employees"`
Country string `json:"country"`
}{
ID : "123" ,
CompanyName : "Stark Industries" ,
NumEmployees : 5215 ,
Country : "USA" ,
}
client . Collection ( "companies" ). Documents (). Create ( context . Background (), document )
newDocument := struct {
ID string `json:"id"`
CompanyName string `json:"company_name"`
NumEmployees int `json:"num_employees"`
Country string `json:"country"`
}{
ID : "123" ,
CompanyName : "Stark Industries" ,
NumEmployees : 5215 ,
Country : "USA" ,
}
client . Collection ( "companies" ). Documents (). Upsert ( context . Background (), newDocument )
searchParameters := & api. SearchCollectionParams {
Q : pointer . String ( "stark" ),
QueryBy : pointer . String ( "company_name" ),
FilterBy : pointer . String ( "num_employees:>100" ),
SortBy : & ([] string { "num_employees:desc" }),
}
client . Collection ( "companies" ). Documents (). Search ( context . Background (), searchParameters )
對於支援多個QueryBy
參數,可以在每個字段後面添加,
searchParameters := & api. SearchCollectionParams {
Q : pointer . String ( "stark" ),
QueryBy : pointer . String ( "company_name, country" ),
FilterBy : pointer . String ( "num_employees:>100" ),
SortBy : & ([] string { "num_employees:desc" }),
}
client . Collection ( "companies" ). Documents (). Search ( context . Background (), searchParameters )
client . Collection ( "companies" ). Document ( "123" ). Retrieve ( context . Background ())
document := struct {
CompanyName string `json:"company_name"`
NumEmployees int `json:"num_employees"`
}{
CompanyName : "Stark Industries" ,
NumEmployees : 5500 ,
}
client . Collection ( "companies" ). Document ( "123" ). Update ( context . Background (), document )
client . Collection ( "companies" ). Document ( "123" ). Delete ( context . Background ())
filter := & api. DeleteDocumentsParams { FilterBy : "num_employees:>100" , BatchSize : 100 }
client . Collection ( "companies" ). Documents (). Delete ( context . Background (), filter )
client . Collection ( "companies" ). Retrieve ( context . Background ())
client . Collection ( "companies" ). Documents (). Export ( context . Background ())
若要匯入的文件可以是文件物件數組,也可以格式化為換行符號分隔的 JSON 字串(請參閱 JSONL)。
導入一組文件:
documents := [] interface {}{
struct {
ID string `json:"id"`
CompanyName string `json:"companyName"`
NumEmployees int `json:"numEmployees"`
Country string `json:"country"`
}{
ID : "123" ,
CompanyName : "Stark Industries" ,
NumEmployees : 5215 ,
Country : "USA" ,
},
}
params := & api. ImportDocumentsParams {
Action : pointer . String ( "create" ),
BatchSize : pointer . Int ( 40 ),
}
client . Collection ( "companies" ). Documents (). Import ( context . Background (), documents , params )
導入 JSONL 檔案:
params := & api. ImportDocumentsParams {
Action : pointer . String ( "create" ),
BatchSize : pointer . Int ( 40 ),
}
importBody , err := os . Open ( "documents.jsonl" )
// defer close, error handling ...
client . Collection ( "companies" ). Documents (). ImportJsonl ( context . Background (), importBody , params )
client . Collections (). Retrieve ( context . Background ())
client . Collection ( "companies" ). Delete ( context . Background ())
keySchema := & api. ApiKeySchema {
Description : "Search-only key." ,
Actions : [] string { "documents:search" },
Collections : [] string { "companies" },
ExpiresAt : time . Now (). AddDate ( 0 , 6 , 0 ). Unix (),
}
client . Keys (). Create ( context . Background (), keySchema )
client . Key ( 1 ). Retrieve ( context . Background ())
client . Keys (). Retrieve ( context . Background ())
client . Key ( 1 ). Delete ( context . Background ())
override := & api. SearchOverrideSchema {
Rule : api. SearchOverrideRule {
Query : "apple" ,
Match : "exact" ,
},
Includes : []api. SearchOverrideInclude {
{
Id : "422" ,
Position : 1 ,
},
{
Id : "54" ,
Position : 2 ,
},
},
Excludes : []api. SearchOverrideExclude {
{
Id : "287" ,
},
},
}
client . Collection ( "companies" ). Overrides (). Upsert ( context . Background (), "customize-apple" , override )
client . Collection ( "companies" ). Overrides (). Retrieve ( context . Background ())
client . Collection ( "companies" ). Override ( "customize-apple" ). Delete ( context . Background ())
body := & api. CollectionAliasSchema { CollectionName : "companies_june11" }
client . Aliases (). Upsert ( "companies" , body )
client . Alias ( "companies" ). Retrieve ( context . Background ())
client . Aliases (). Retrieve ( context . Background ())
client . Alias ( "companies" ). Delete ( context . Background ())
synonym := & api. SearchSynonymSchema {
Synonyms : [] string { "blazer" , "coat" , "jacket" },
}
client . Collection ( "products" ). Synonyms (). Upsert ( context . Background (), "coat-synonyms" , synonym )
synonym := & api. SearchSynonymSchema {
Root : "blazer" ,
Synonyms : [] string { "blazer" , "coat" , "jacket" },
}
client . Collection ( "products" ). Synonyms (). Upsert ( context . Background (), "coat-synonyms" , synonym )
client . Collection ( "products" ). Synonym ( "coat-synonyms" ). Retrieve ( context . Background ())
client . Collection ( "products" ). Synonyms (). Retrieve ( context . Background ())
client . Collection ( "products" ). Synonym ( "coat-synonyms" ). Delete ( context . Background ())
stopwords := & api. StopwordsSetUpsertSchema {
Locale : pointer . String ( "en" ),
Stopwords : [] string { "Germany" , "France" , "Italy" , "United States" },
}
client . Stopwords (). Upsert ( context . Background (), "stopword_set1" , stopwords )
client . Stopword ( "stopword_set1" ). Retrieve ( context . Background ())
client . Stopwords (). Retrieve ( context . Background ())
client . Stopword ( "stopword_set1" ). Delete ( context . Background ())
preset := & api. PresetUpsertSchema {}
preset . Value . FromMultiSearchSearchesParameter (api. MultiSearchSearchesParameter {
Searches : []api. MultiSearchCollectionParameters {
{
Collection : "books" ,
},
},
})
// or: preset.Value.FromSearchParameters(api.SearchParameters{Q: "Books"})
client . Presets (). Upsert ( context . Background (), "listing-view-preset" , preset )
client . Preset ( "listing-view-preset" ). Retrieve ( context . Background ())
client . Presets (). Retrieve ( context . Background ())
client . Preset ( "listing-view-preset" ). Delete ( context . Background ())
client . Operations (). Snapshot ( context . Background (), "/tmp/typesense-data-snapshot" )
client . Operations (). Vote ( context . Background ())
client . Metrics (). Retrieve ( context . Background ())
client . Stats (). Retrieve ( context . Background ())
歡迎在 GitHub 上提交錯誤報告和拉取請求:https://github.com/typesense/typesense-go。
安裝依賴項,
go mod download
更新生成的文件,
go generate ./...
typesense-go
在 Apache 2 許可證下分發。