gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:12:29 28 4
gpt4 key购买 nike

我有两个字段的集合

{
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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com