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

标签 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 中寻找我发现他们使用的是完全不同的架构。有什么想法可以实现我想要的吗?

最佳答案

问题和给出的原始答案的链接都已失效,但是有一种方法可以为此定义架构,现代版本支持

推荐的方法是在用于文本索引的属性旁边的文档或嵌入文档中包含一个"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”或数组中“embedded documents”中所示,省略的地方将简单地使用为指数。例如,此处的第二个文档在“根”上没有语言属性,因此假定 “english”,因为它是索引的默认值。

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

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

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

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

关于使用多种语言的 mongodb 文本搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18065196/

相关文章:

Mysql 要求相关性然后按日期排序

mongodb - mongodump 和 mongorestore 更改文档的顺序

mongodb - Mongo 中 $center 和 $centerSphere 之间的区别?

PHP:在查询字符串中查找 3 个字符的单词以增强 MySQL 全文搜索

postgresql - 错误: text search configuration does not exist

Django-haystack 文档=True 字段

mysql - 从首先返回的全文搜索中获取精确匹配?

MongoDB 额外集合

mongodb - 避免在 mongo 客户端中打印输出

node.js - sails JS : Setting autoPK:false still generates mongodb's id attribute