Mongodb atlas 搜索:如何对同一个查询字符串使用多个分析器,以便 return 至少得到一些结果
Mongodb atlas search: how to make use of multiple analyzers for the same query string, so as to return atleast some result
所以问题陈述是 - 我正在使用 atlas 搜索来搜索产品数据,并且有多种语言的产品详细信息。为此,我使用了 multi analyzer 并在同一字段上定义了 standard 和相应的 language 分析器,从而在任何情况下都能得到匹配的产品。要求是,由于这是产品搜索,我需要 return 至少提供一些建议,让用户通过 return 搜索结果查看和访问产品。这是我在研究如何在单个字段上应用多个分析器后使用的映射:
{
"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"
}
}
}
}
}
}
现在,我想要的是 - 如果我正在搜索英语、德语或法语的单词,我必须得到一个结果。这个映射也很好,我得到了所有三种语言的结果。但是用例是,我想要在任何这些情况下的结果:
- 搜索字符串是英语、德语或法语
- 搜索字符串模糊(有拼写错误)
- 搜索字符串包含任何特殊字符或空格
- 搜索字符串可以被视为一个完整的术语,结果可以在此基础上return编辑。
以上所有要求让我使用所有分析器——标准、关键字、语言、空格和简单。但这将索引大小增加到超过 3KB(这是上限),而且即使对于我目前仅应用语言和标准分析器的映射,我也没有得到结果。
Mongodb Atlas 搜索文档
帮助我了解如何在不使查询复杂化且不使用 compound
运算符的情况下做到这一点。来自文档:
The path parameter is used by the Atlas Search operators to specify the field or fields to be searched. It may contain:
- A string
- An array of strings
- A multi analyzer specification
- An array containing a combination of strings and multi analyzer specifications
这是我在查询中修改的:
{
$search: {
text: {
query: event.queryStringParameters.q,
path: ['name',{"value": 'name', "multi": "german"},{"value": 'name', "multi": "french"}],
fuzzy: {
maxEdits: 2
}
}
}
}
所以问题陈述是 - 我正在使用 atlas 搜索来搜索产品数据,并且有多种语言的产品详细信息。为此,我使用了 multi analyzer 并在同一字段上定义了 standard 和相应的 language 分析器,从而在任何情况下都能得到匹配的产品。要求是,由于这是产品搜索,我需要 return 至少提供一些建议,让用户通过 return 搜索结果查看和访问产品。这是我在研究如何在单个字段上应用多个分析器后使用的映射:
{
"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"
}
}
}
}
}
}
现在,我想要的是 - 如果我正在搜索英语、德语或法语的单词,我必须得到一个结果。这个映射也很好,我得到了所有三种语言的结果。但是用例是,我想要在任何这些情况下的结果:
- 搜索字符串是英语、德语或法语
- 搜索字符串模糊(有拼写错误)
- 搜索字符串包含任何特殊字符或空格
- 搜索字符串可以被视为一个完整的术语,结果可以在此基础上return编辑。
以上所有要求让我使用所有分析器——标准、关键字、语言、空格和简单。但这将索引大小增加到超过 3KB(这是上限),而且即使对于我目前仅应用语言和标准分析器的映射,我也没有得到结果。
Mongodb Atlas 搜索文档
帮助我了解如何在不使查询复杂化且不使用 compound
运算符的情况下做到这一点。来自文档:
The path parameter is used by the Atlas Search operators to specify the field or fields to be searched. It may contain:
- A string
- An array of strings
- A multi analyzer specification
- An array containing a combination of strings and multi analyzer specifications
这是我在查询中修改的:
{
$search: {
text: {
query: event.queryStringParameters.q,
path: ['name',{"value": 'name', "multi": "german"},{"value": 'name', "multi": "french"}],
fuzzy: {
maxEdits: 2
}
}
}
}