所以问题陈述是-我使用atlas search来搜索产品数据,并有多种语言的产品详细信息。为此,我使用了多分析器并定义了标准和相应的语言analyzer,以便在任何情况下都能获得匹配的产品。要求是,由于这是一个产品搜索,我需要返回至少一些建议,让用户有一个看一看,并通过返回的搜索结果的产品。以下是我在研究如何在单个字段上应用多个分析器后使用的映射:
{
"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 (这是一个上限),而且即使对于我目前只应用了语言和标准分析器的映射,我也得不到结果。
发布于 2020-10-15 06:42:39
Mongodb Atlas搜索文档路径
帮助我了解了如何在不使查询复杂化的情况下做到这一点,并且不使用
compound
运算符。从文档中:
path参数由Atlas搜索运算符用来指定要搜索的一个或多个字段。它可能包含:
字符串
字符串数组
多分析器规范
包含字符串和多分析器规范组合的数组
这是我在查询中修改的内容:
{
$search: {
text: {
query: event.queryStringParameters.q,
path: ['name',{"value": 'name', "multi": "german"},{"value": 'name', "multi": "french"}],
fuzzy: {
maxEdits: 2
}
}
}
}
https://stackoverflow.com/questions/64282981
复制相似问题