Mongodb图谱搜索:如何对同一个查询字符串使用多个分析器,从而至少返回一些结果



所以问题陈述是-我使用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
}
}
}
}

最新更新