所以问题陈述是-我使用atlas搜索来搜索产品数据,并拥有多种语言的产品详细信息。为此,我使用了多分析器,并在同一字段上定义了标准和相应的语言分析器,以便在任何情况下获得匹配的产品。要求是,由于这是一个产品搜索,我需要至少返回一些建议,供用户查看并通过返回的搜索结果访问产品。以下是我在研究了如何在单个字段上应用多个分析器后使用的映射:
{
"mappings": {
"dynamic": false,
"fields": {
"name": {
"type": "string",
"analyzer": "lucene.standard",
"multi": {
"german": { //german is the name that I have given to this analyzer
"analyzer": "lucene.german",
"type": "string"
},
"french": { //french is the name that I have given to this analyzer
"analyzer": "lucene.french",
"type": "string"
}
}
}
}
}
}
现在,我想要的是——如果我在搜索英语、德语或法语的单词,我必须得到一个结果。这个映射也很好,我得到了所有三种语言的结果。但用例是,我希望在以下任何一种情况下都能得到结果:
- 搜索字符串为英语、德语或法语
- 搜索字符串模糊(有拼写错误(
- 搜索字符串包含任何特殊字符或空格
- 搜索字符串可以被视为一个完整的术语,并且可以在此基础上返回结果
以上所有要求使我能够使用所有分析器——标准、关键字、语言、空白和简单。但这将使索引大小增加到超过3KB(这是一个上限(,而且即使对于我目前只应用语言和标准分析器的映射,我也没有得到结果。
Mongodb Atlas搜索文档
路径构建
帮助我了解了如何在不复杂查询和不使用compound
运算符的情况下做到这一点。来自文件:
Atlas Search操作符使用path参数来指定要搜索的字段。它可能包含:
- 字符串
- 字符串数组
- 多分析仪规范
- 包含字符串和多分析器规范组合的数组
这是我在查询中修改的内容:
{
$search: {
text: {
query: event.queryStringParameters.q,
path: ['name',{"value": 'name', "multi": "german"},{"value": 'name', "multi": "french"}],
fuzzy: {
maxEdits: 2
}
}
}
}