111 lines
3.8 KiB
Go
111 lines
3.8 KiB
Go
// =============================================================================
|
||
// Meilisearch 数据结构定义
|
||
// =============================================================================
|
||
|
||
package meilisearch
|
||
|
||
// SearchParams 搜索参数
|
||
type SearchParams struct {
|
||
Query string // 搜索查询字符串
|
||
Page int64 // 页码(从1开始)
|
||
Limit int64 // 每页数量
|
||
Sort []string // 排序字段,如 ["createdAt:desc", "price:asc"]
|
||
Filter string // 过滤条件
|
||
SearchableAttributes string // 可搜索字段
|
||
AttributesToRetrieve []string // 返回字段
|
||
Facets []string // 聚合字段
|
||
HitsPerPage int // 每页命中数
|
||
ShowRankingScore bool // 是否显示排名分数
|
||
}
|
||
|
||
// SearchResult 搜索结果
|
||
type SearchResult struct {
|
||
Hits []map[string]interface{} `json:"hits"`
|
||
EstimatedTotalHits int64 `json:"estimatedTotalHits"`
|
||
Limit int `json:"limit"`
|
||
Offset int `json:"offset"`
|
||
ProcessingTimeMs int `json:"processingTimeMs"`
|
||
Query string `json:"query"`
|
||
FacetDistribution map[string]interface{} `json:"facetDistribution,omitempty"`
|
||
}
|
||
|
||
// IndexConfig 索引配置
|
||
type IndexConfig struct {
|
||
UID string // 索引唯一标识
|
||
PrimaryKey string // 主键字段名
|
||
}
|
||
|
||
// IndexSettings 索引设置
|
||
type IndexSettings struct {
|
||
SearchableAttributes []string `json:"searchableAttributes,omitempty"`
|
||
DisplayedAttributes []string `json:"displayedAttributes,omitempty"`
|
||
FilterableAttributes []string `json:"filterableAttributes,omitempty"`
|
||
SortableAttributes []string `json:"sortableAttributes,omitempty"`
|
||
RankingRules []string `json:"rankingRules,omitempty"`
|
||
StopWords []string `json:"stopWords,omitempty"`
|
||
Synonyms map[string][]string `json:"synonyms,omitempty"`
|
||
DistinctAttribute string `json:"distinctAttribute,omitempty"`
|
||
TypoTolerance *TypoTolerance `json:"typoTolerance,omitempty"`
|
||
Pagination *Pagination `json:"pagination,omitempty"`
|
||
Faceting *Faceting `json:"faceting,omitempty"`
|
||
}
|
||
|
||
// TypoTolerance 拼写容错设置
|
||
type TypoTolerance struct {
|
||
Enabled bool `json:"enabled"`
|
||
MinWordSizeForTypos map[string]int `json:"minWordSizeForTypos"`
|
||
DisableOnWords []string `json:"disableOnWords"`
|
||
DisableOnAttributes []string `json:"disableOnAttributes"`
|
||
}
|
||
|
||
// Pagination 分页设置
|
||
type Pagination struct {
|
||
MaxTotalHits int `json:"maxTotalHits"`
|
||
}
|
||
|
||
// Faceting 聚合设置
|
||
type Faceting struct {
|
||
MaxValuesPerFacet int `json:"maxValuesPerFacet"`
|
||
}
|
||
|
||
// TaskResult 任务结果
|
||
type TaskResult struct {
|
||
TaskUID int64 `json:"taskUid"`
|
||
Status string `json:"status"`
|
||
Type string `json:"type"`
|
||
Details map[string]interface{} `json:"details,omitempty"`
|
||
Error string `json:"error,omitempty"`
|
||
}
|
||
|
||
// Document 文档
|
||
type Document map[string]interface{}
|
||
|
||
// 文档操作符
|
||
const (
|
||
OperatorEquals = "="
|
||
OperatorNotEquals = "!="
|
||
OperatorGreaterThan = ">"
|
||
OperatorGreaterOrEqual = ">="
|
||
OperatorLessThan = "<"
|
||
OperatorLessOrEqual = "<="
|
||
OperatorAnd = "AND"
|
||
OperatorOr = "OR"
|
||
OperatorNot = "NOT"
|
||
)
|
||
|
||
// 排序顺序
|
||
const (
|
||
SortAsc = "asc"
|
||
SortDesc = "desc"
|
||
)
|
||
|
||
// 排名规则
|
||
const (
|
||
RankingRuleWords = "words"
|
||
RankingRuleTypo = "typo"
|
||
RankingRuleProximity = "proximity"
|
||
RankingRuleAttribute = "attribute"
|
||
RankingRuleSort = "sort"
|
||
RankingRuleExactness = "exactness"
|
||
)
|