MongoDB Atlas Search autocomplete多词匹配结果异常问题
问题根因
autocomplete算子默认对多词输入做分词后OR逻辑匹配:输入name whatever时,查询会被拆成name、whatever两个独立的前缀匹配规则,只要文档name字段命中任意一个规则就会被返回。foo whatever因为包含whatever匹配项,所以被误召回。
你当前的索引已经给name字段同时配置了string和autocomplete类型,完全不需要调整索引配置,只改查询语句就能满足所有搜索需求,原有what、whatever这类单词前缀搜索的逻辑可以保持不变。
适配方案
根据匹配精度要求二选一即可:
方案1:要求所有输入词都命中,不强制词顺序
直接在原有autocomplete查询中增加operator: "and"配置,要求query拆分出的所有词项都满足前缀匹配才召回文档:{ index: 'indexName', autocomplete: { query: 'name whatever', path: 'name', operator: "and" } }注意:该方案会召回词序不一致的文档,比如存储值为
whatever name的文档也会被命中。方案2:要求多词按顺序连续匹配(精准短语匹配,符合当前需求)
换用phrase算子执行查询,强制要求所有输入词按顺序相邻匹配,既保留autocomplete的前缀补全能力(比如输入name what也能匹配到name whatever),又不会召回仅命中部分词、词序不对的无关文档:{ index: 'indexName', phrase: { query: 'name whatever', path: 'name', tokenOrder: "sequential", slop: 0 } }该查询执行后,仅会返回
name字段按顺序包含name+后续词前缀匹配whatever的文档,foo whatever这类仅命中后半段词的结果会被直接过滤。
内容的提问来源于stack exchange,提问作者Lion.k
相关产品推荐
相关产品推荐

