电商商品搜索模板
电商搜索的核心需求是:标题权重最高、支持模糊容错、短语匹配提升精准度。
设计思路
- 权重分配:
title(标题)权重最高(×5),brand(品牌)次之(×3),确保核心信息优先匹配。 - 多策略组合:用
bool should组合短语匹配(精准)、普通匹配(召回)、前缀匹配(联想),兼顾精准度和召回率。 - 容错机制:开启
fuzziness: "AUTO"允许输入错误(如“Mste60”匹配“Mate60”),prefix_length: 2保证前2个字符精准,避免过度模糊。
代码
GET /products/_search
{
"query": {
"bool": {
"should": [
// 1. 短语匹配(高权重):提升精准短语的优先级
{
"multi_match": {
"query": "华为 Mate60 Pro",
"fields": ["title^5", "brand^3", "keywords^2"],
"type": "phrase",
"slop": 1,
"boost": 3
}
},
// 2. 普通匹配(中权重):保证召回率
{
"multi_match": {
"query": "华为 Mate60 Pro",
"fields": ["title^5", "brand^3", "description^2", "category"],
"type": "best_fields",
"operator": "AND",
"fuzziness": "AUTO",
"prefix_length": 2
}
},
// 3. 前缀匹配(低权重):支持搜索框联想
{
"multi_match": {
"query": "华为 Mate60 Pro",
"fields": ["title^5", "brand^3"],
"type": "phrase_prefix",
"max_expansions": 10,
"boost": 0.5
}
}
]
}
},
"highlight": {
"fields": {
"title": {},
"description": {}
}
}
}
文档/文章检索例子
文档检索的核心需求是:多字段互补匹配、支持跨字段短语、结果相关性优先。
设计思路
- 类型选择:
cross_fields解决跨字段短语匹配(如“张三 作者”匹配author:张三+title:作者);most_fields让匹配字段更多的文档得分更高(标题+摘要+标签都匹配的文档更相关)。 - 过滤+排序:通过
bool must添加基础过滤条件,排序时结合相关性得分和发布时间,保证结果时效性。
代码
GET /documents/_search
{
"query": {
"bool": {
"must": [
// 基础条件过滤(如时间、分类)
{
"range": {
"publish_time": {
"gte": "2023-01-01"
}
}
}
],
"should": [
// 1. 跨字段短语匹配:适合人名、专有名词等跨字段场景
{
"multi_match": {
"query": "机器学习实战 读书笔记",
"fields": ["title^4", "author^2", "tags^3", "content"],
"type": "cross_fields",
"operator": "AND",
"boost": 2
}
},
// 2. 多字段互补匹配:匹配字段越多,得分越高
{
"multi_match": {
"query": "机器学习实战 读书笔记",
"fields": ["title^4", "abstract^3", "content", "tags^3"],
"type": "most_fields",
"boost": 1.5
}
}
]
}
},
"sort": [
// 按相关性得分+发布时间排序
{"_score": {"order": "desc"}},
{"publish_time": {"order": "desc"}}
]
}
通用优化建议
- 字段权重调整:根据业务数据特点调整
^N权重值(如视频平台可提升video_title权重,降低description权重)。 - 模糊匹配控制:对品牌、型号等核心字段,可设置
fuzziness: 0关闭模糊;对长文本字段开启AUTO模糊。 - 性能优化:避免在
content等超大字段上使用phrase_prefix,可改用edge_ngram分词提前构建前缀索引。
总结
- 电商搜索:优先使用
phrase类型保证精准度,结合best_fields保证召回,用fuzziness容错输入错误。 - 文档检索:用
cross_fields处理跨字段短语,用most_fields提升多字段匹配的相关性,结合过滤和排序优化结果。 - 权重设计:核心字段(标题、品牌)设置更高权重,确保关键信息对排序的主导作用。