Mongodb 使用多种语言的文档定义ElasticSearch索引
我正在尝试迁移MongoDB数据库,它必须使用ElasticSearch。MongoDB支持这一点,它有一个额外的字段,告诉子文档使用的是哪种语言。例如:Mongodb 使用多种语言的文档定义ElasticSearch索引,mongodb,elasticsearch,Mongodb,elasticsearch,我正在尝试迁移MongoDB数据库,它必须使用ElasticSearch。MongoDB支持这一点,它有一个额外的字段,告诉子文档使用的是哪种语言。例如: { _id: 1, language: "portuguese", original: "A sorte protege os audazes.", translation: [ { language: "english&
{
_id: 1,
language: "portuguese",
original: "A sorte protege os audazes.",
translation:
[
{
language: "english",
quote: "Fortune favors the bold."
},
{
language: "spanish",
quote: "La suerte protege a los audaces."
}
]
}
在ElasticSearch中,我找不到支持这一点的方法。似乎我只能为每个字段指定语言,但该语言不能基于另一个字段。还是我错了?有没有办法支持这一点?如果不是,对于上面的示例,最适合ElasticSearch的文档模式是什么?同样的模式在ElasticSearch中可用,称为。因此,对于您的示例,您需要将索引映射定义为
{
"mappings": {
"properties": {
"text": {
"type": "text",
"fields": {
"english": {
"type": "text",
"analyzer": "english"
},
"spanish": { --> this sub-field will have Spanish content, which spanish inbuilt analyzer
"type": "text",
"analyzer": "spanish"
}
}
}
}
}
}
你可以在elasticsearch中找到
您可以查询多个特定于语言的字段
{
"query": {
"multi_match": {
"query": "quick brown foxes",
"fields": [
"text",
"text.english" --> query english sub-field
"text.spanish" --> query spanish sub-field
],
"type": "most_fields"
}
}
}
嗯,我看不出这是如何回答我的数据结构如前所述的问题的。所以问题是,
翻译
是一个对象数组,每个对象都有自己的语言,因此需要不同的分析器。您的答案根本没有触及这一点。@Mitar感谢您的更新,如果您仔细注意,text
有两个子字段(英语和西班牙语,它们使用自己的分析器),您可以添加多达个语言字段,以及它们的语言分析器(由elasticsearch支持,我也提供了链接)@Mitar,如果您还有疑问,请阅读我的链接中提到的官方文件,这将使其更加清晰,并随时询问后续问题是的,我已经阅读了。当原始文档看起来像{“text”:“content”}
并且的“content”
可能使用不同的语言时,您的解决方案会起作用。这不是我的结构。我有一个包含子文档的数组,其中每个子文档都有确切的已知语言,存储在一个字段中。@Mitar,是的,我明白了,这只是结构上的差异,你可以让它与你的数据类型一起工作(概念很重要),你可以根据需要对数据建模。希望你明白这一点