使用多种语言的mongodb文本搜索

Sal*_*ali 5 full-text-search mongodb

我有两个字段的集合

{
name : 'text English',
descr: 'Texto largo en español'
}
Run Code Online (Sandbox Code Playgroud)

我想创建一个多语言搜索,对名称有更多偏好。到目前为止,我正在做这样的事情:

db.items.ensureIndex({
        name : "text",
        descr : "text"
    },{
        default_language: "spanish",
        name : "searchIndex",
        weights : {
            name : 3,
            descr: 1
        }
    }
)
Run Code Online (Sandbox Code Playgroud)

问题是它把一切都当作西班牙语。查看文档我发现他们使用完全不同的模式。有什么想法可以实现我想要的吗?

Nei*_*unn 5

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

\n\n

推荐的方法是"language"在文档或嵌入文档中包含用于文本索引的属性旁边的属性。术语“旁边”是指处于“同一级别”,并且与索引中的属性没有明确相邻。

\n\n

常见的东西看起来像:

\n\n
{\n  "description": "Texto largo en espa\xc3\xb1ol",\n  "language": "spanish",\n  "translation": [\n    {\n      "description": "Large text in Spanish",\n      "language": "english"\n    },\n    {\n      "description": "Grand texte en espagnol",\n      "language": "french"\n    }\n  ]\n},\n{\n  "description": "The quick brown fox",\n  "translation": [\n    {\n      "description": "Le renard brun rapide",\n      "language": : "french"\n    }\n  ]\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后假设我们使用“默认”文本索引语言“英语”,我们可以简单地使用以下内容进行索引:

\n\n
db.collection.createIndex({ "description": "text", "translation.description": "text" })\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后,MongoDB 将使用"language"文档“根”中显示的属性或数组中“嵌入文档”中显示的属性,如果省略,它将仅使用为索引定义的默认值。例如,这里的第二个文档在“根”上没有语言属性,因此"english"被认为是因为它是索引上的默认值。

\n\n

索引的项目不需要按任何顺序,这也可以通过第一个示例文档将"english"条目放入带有嵌入文档的数组中来证明。"translations"嵌入项目的规则略有不同,因为我们必须包含"language"嵌入文档的属性或来自文档“根”的实际使用的语言。在此示例中,数组中任何没有"language"属性的嵌入文档都将被视为正在使用,"spanish"因为这是“根”中定义的内容。

\n\n

当然,所有搜索都是在考虑索引中存在的所有路径的情况下完成的,因此也考虑了此处定义"description"的 和 嵌入"translation.description"属性。仍然始终按照操作员$language选项指定的方式使用适当的“搜索语言” $text,因为仍然考虑与此相关的“停止词”和“词干”以及创建索引时设置的默认索引语言。

\n\n

嵌入格式还为您提供了一个轻松的点,可以从中检索语言信息以在两种语言之间进行“翻译”,其中您为相关两种语言定义了内容,因此在这种情况下它的实用性是“双重”的。

\n\n

具体文档现在位于为多种语言的集合创建文本索引,作为指定文本索引的语言这一更广泛主题中的一部分,其中包含指向所有其他详细信息的链接,包括在索引上指定不同的默认语言。

\n


Der*_*ick 3

您具体指的是:http://docs.mongodb.org/manual/tutorial/create-text-index-on-multi-language-collection/#use-any-field-to-specify-the-language-for-a -document我想,它允许您使用特定字段的值覆盖整个文档的语言。

您想要从问题中得到什么,您在 MongoDB 中还无法做到,但该功能计划在即将推出的 MongoDB 版本中实现。您可以在https://jira.mongodb.org/browse/SERVER-9390上跟踪票证