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

时间:2013-08-05 18:31:01

标签: mongodb full-text-search

我有两个字段的集合

{
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
        }
    }
)

问题在于它将一切视为西班牙语。查看documentation我发现他们使用完全不同的架构。有没有想法实现我的目标?

2 个答案:

答案 0 :(得分:3)

链接已经从问题和给出的原始答案中删除了,但是有一种方法可以为现代版本中的支持定义架构。

建议的方法是在文档中包含"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将使用文档“root”中显示的"language"属性或数组中的“embedded documents”,如果省略,它将仅使用为索引定义的默认值。例如,这里的第二个文档在“root”上没有语言属性,因此假设"english",因为它是索引的默认值。

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

搜索当然都是在考虑索引中存在的所有路径的情况下完成的,因此这里定义的"description"和嵌入式"translation.description"属性都是如此。仍然始终使用$text运算符的$language选项指定相应的“搜索语言”,因为“停止词”和“词干”仍然与此相关,默认索引语言设置索引创建。

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

特定文档现在位于Create a text Index for a Collection in Multiple Languages,作为Specify a Language for Text Index更广泛主题中的一个部分,其中包含指向所有其他详细信息的链接,包括在索引上指定不同的默认语言。

答案 1 :(得分:2)

你特别指的是: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

跟踪故障单