lucene/elasticsearch中子文档的特定分析器
在阅读了文档、测试并阅读了stackoverflow上的许多其他问题之后: 我们的文档有多种语言的标题和描述。还有一些标记被翻译成相同的语言。系统中可能有多达30-40种不同的语言,但单个文档可能只有3或4种翻译 这是计划的文档结构:lucene/elasticsearch中子文档的特定分析器,lucene,
elasticsearch,multilingual,Lucene,
elasticsearch,Multilingual,在阅读了文档、测试并阅读了stackoverflow上的许多其他问题之后: 我们的文档有多种语言的标题和描述。还有一些标记被翻译成相同的语言。系统中可能有多达30-40种不同的语言,但单个文档可能只有3或4种翻译 这是计划的文档结构: { "luck": { "id": 10018, "pub": 0, "pr": 100002, "loc": { "lat": 42.7, "lon": 84.2 }, "t": [
{
"luck": {
"id": 10018,
"pub": 0,
"pr": 100002,
"loc": {
"lat": 42.7,
"lon": 84.2
},
"t": [
{
"lang": "en-analyzer",
"title": "Forest",
"desc": "A lot of trees.",
"tags": [
"Wood",
"Nature",
"Green Mouvement"
]
},
{
"lang": "fr-analyzer",
"title": "Forêt",
"desc": "A grand nombre d'arbre.",
"tags": [
"Bois",
"Nature",
"Mouvement Vert"
]
}
],
"dates": [
"2014-01-01T20:00",
"2014-06-06T20:00",
"2014-08-08T20:00"
]
}
}
可能的查询是“arbre”或“wood”或“forest”或“nature”,并结合日期和地理距离过滤器,此外,标签数组上会有一些方面(显然包括计数)
我们可以生成最适合elasticsearch(或lucene)的任何文档结构。对每种语言进行具体分析是至关重要的,因此我们使用“_分析器”来区分这些语言
{
"luck": {
"properties": {
"id": {
"type": "long"
},
"pub": {
"type": "long"
},
"pr": {
"type": "long"
},
"loc": {
"type": "geo_point"
},
"t": {
"_analyzer": {
"path": "t.lang"
},
"properties": {
"lang": {
"type": "string"
},
"properties": {
"title": {
"type": "string"
},
"desc": {
"type": "string"
},
"tags": {
"type": "string"
}
}
}
}
}
}
A) 显然,这个想法不起作用:在放置映射之后,我们检索相同的映射(“GET”),它似乎忽略了特定的分析器(使用顶级“_分析器”的测试效果很好)。“_analyzer”是否适用于子文档?如果是,我们应如何参考它?我们还测试了如何将子文档声明为“对象”或“嵌套”。多语言文档索引应该如何工作
B) 一种可能是将每种语言放在自己的文档中:在这种情况下,我们如何管理id?最后,两个文档应该引用相同的id。例如,如果用户搜索“nature”(我们不知道用户是否打算用英语或法语查找“nature”),则此文档将在结果集中出现两次,并且计数和分页将非常错误(也是面计数)
有什么想法吗