lucene / elasticsearch中子文档的特定分析器

时间:2013-12-23 06:56:27

标签: lucene elasticsearch multilingual

阅读文档后,在stackoverflow上测试并阅读了很多其他问题:

我们的文档包含多种语言的标题和说明。还有一些标签被翻译成相同的语言。系统中最多可能有30-40种不同的语言,但单个文档可能只有3或4种翻译。

这是计划的文件结构:

{
 "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”与日期和geo_distance过滤器相结合,而且标签数组上会有一些方面(显然包括计数)。

我们可以生成最适合elasticsearch(或lucene)的文档结构。具体分析每种语言至关重要,因此我们使用“_analyzer”来区分语言。

{
  "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)显然,这个想法不起作用:在PUTting映射之后,我们检索相同的映射(“GET”)并且它似乎忽略了特定的分析器(具有顶级“_analyzer”的测试工作正常) 。 “_analyzer”是否适用于子文档,如果是,我们应该如何引用它?我们还测试了将子文档声明为“对象”或“嵌套”。多语言文档索引应该如何工作。

B)一种可能性是将每种语言都放在自己的文档中:在这种情况下,我们如何管理id?最后两个文件都应该引用相同的id。例如,如果用户搜索“自然”(并且我们不知道用户是否打算用英语或法语找到“自然”),则该文档将在结果集中出现两次,并且计数和分页将非常错(也是小计数)。

有什么想法吗?

0 个答案:

没有答案