Files
common/full-text-search/meilisearch/types.go

111 lines
3.8 KiB
Go
Raw Normal View History

2026-02-13 11:08:29 +08:00
// =============================================================================
// 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 // 是否显示排名分数
2026-02-13 11:08:29 +08:00
}
// 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"
)