使用多种语言进行MongoDB文本搜索

5

我有一个集合,其中包含两个字段。

{
name : 'text English',
descr: 'Texto largo en español'
}

我希望创建一个多语言搜索,更偏好于名称。 到目前为止,我的做法如下:
db.items.ensureIndex({
        name : "text",
        descr : "text"
    },{
        default_language: "spanish",
        name : "searchIndex",
        weights : {
            name : 3,
            descr: 1
        }
    }
)

问题在于它将所有内容都视为西班牙语。查看文档,我发现他们使用完全不同的模式。有没有办法实现我想要的?
2个回答

5

问题和原始答案的链接都已失效,但是现代版本中有一种方法可以定义此模式,得到支持

推荐的方法是在文档或嵌入式文档中包含一个"language"属性,该属性位于用于文本索引的属性旁边。术语“旁边”意味着在“同一级别”,而不是在索引属性旁边。

常见的情况如下:

{
  "description": "Texto largo en español",
  "language": "spanish",
  "translation": [
    {
      "description": "Large text in Spanish",
      "language": "english"
    },
    {
      "description": "Grand texte en espagnol",
      "language": "french"
    }
  ]
},
{
  "description": "The quick brown fox",
  "translation": [
    {
      "description": "Le renard brun rapide",
      "language": : "french"
    }
  ]
}

然后假设我们使用“英语”作为“默认”的文本索引语言,我们可以通过以下方式进行索引:

db.collection.createIndex({ "description": "text", "translation.description": "text" })

MongoDB 然后将使用 "language" 属性作为文档中所示的 "root" 或数组中的 "嵌入式文档",并且如果省略它,则只会使用索引定义的默认值。例如,这里的第二个文档在 "root" 上没有语言属性,因此假定为 "english",因为它是索引上的默认语言。

索引的项不需要按任何顺序进行排序,这也通过第一个示例文档中的 "translations" 数组中包含 "english" 条目的嵌入式文档进行演示。嵌入项的规则略有不同,因为我们必须在嵌入的文档上包含 "language" 属性,否则实际使用的语言将来自于文档 "root"。在此示例中,数组中任何没有 "language" 属性的嵌入式文档都将被视为使用 "spanish",因为这是在 "root" 中定义的。

搜索当然考虑到索引中存在的所有路径,因此在此处定义的"description"和嵌入式"translation.description"属性上进行搜索。适当的“搜索语言”仍然根据$text运算符的$language选项指定,因为“停用词”和“词干提取”仍然与此相关,并且在索引创建时设置了默认索引语言。

嵌入式格式还为您提供了一个简单的检索点,以检索“翻译”两种语言之间的语言信息,在这种情况下,它的实用性是“双重”的。

特定文档现已位于在多语言下为集合创建文本索引中,作为指定文本索引的语言更广泛主题中的一个部分,其中包括所有其他细节的链接,包括在索引上指定不同的默认语言。


3

错误报告似乎已被标记为已解决。你能更新一下你的回答吗? - rdb
docs.mongodb.org上的教程不再存在 =( - Juan Fuentes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接