MongoDB Atlas无法满足定制搜索需求,寻求ElasticSearch等替代方案
数据类型
Title: stringKeywords: stringDescription: string
搜索需求
- 所有搜索词必须在title、keywords或description的任意字段中找到
- 无需在整个文档中搜索,只需在多个字段中匹配搜索词
- 无需所有字段包含全部搜索词,但必须找到所有搜索词
- 示例:搜索“bake cake”应匹配:
- title包含“cake”且description包含“bake”,确保两个词都被找到
- 由于Atlas搜索语法不支持该逻辑,我们创建了一个拼接字段:将title + keywords合并为新字段
- 当前最大问题是无法为搜索词设置有效的AND逻辑
- “bake cake”应匹配同时包含“bake”和“cake”的内容,但未做特殊处理的Atlas搜索会将“cake cake cake cake”的排名置于“cake bake”之上!
- 无需在整个文档中搜索,只需在多个字段中匹配搜索词
- 字段权重至关重要
- 在“title”中匹配的结果排名应高于在“description”中匹配的结果
- 词序有影响
- 搜索“bake cake”时,应提升“bake”在“cake”之前的结果排名
- 优先完全匹配的结果
- 需惩罚关键词堆砌
- 计算得分后,应根据搜索词的匹配频率降低得分
- 搜索“bake cake”时,“bake a cake”的排名应高于“bake a cake bake a cake cake cake cake”
- 较短内容排名更高
- 搜索“cake”时,排名应为:
- “cake fun”高于
- “cake and fun and baking and frosting”
- 因为在其他条件相同的情况下,第一个字符串更短
- 搜索“cake”时,排名应为:
- 词干提取很重要(尤其是复数形式)
- 当前实现中该功能无效,因为我们不得不通过特殊处理Atlas来实现搜索词的正确AND匹配
我们尝试使用MongoDB Atlas实现上述需求但未成功,因此正在考虑ElasticSearch、Solr等替代方案,也愿意评估其他同类平台。
内容的提问来源于stack exchange,提问作者Sag
相关产品推荐
相关产品推荐

