使用elasticsearch搜索子文档中的术语

时间:2012-11-01 12:39:08

标签: search document elasticsearch

我有一个索引文档结构,如下所示;

{
   "term":"some term",
   "inlang":"some lang"
   "translations" : {
      {
          "translation":"some translation",
          "outlang":"some lang",
          "translations" : {
              {
                  "translation":"some translation 1"
                  "outlang": "some lang 1"
                  "translations" : {...}
              }
          }
      },
      ...
   } 
}

我想在这些文件中找到翻译。但是,此翻译可以存在于本文档的任何级别。是否可以使用elasticsearch动态搜索术语?

例如,

{
   "query": {
      "*.translation":"searchterm"
   }
}

提前致谢

2 个答案:

答案 0 :(得分:5)

我已设法通过以下查询来完成此操作;

{
  "query": {
    "query_string": {
      "query": "someterm",
      "fields": ["*.translation"]
    }
  }
}

{
  "query": {
    "multi_match": {
      "query": "someterm",
      "fields": ["*.translation"]
    }
  }
}

您可以看到elasticsearch google群组对话here

答案 1 :(得分:0)

不,我不相信此功能目前已内置于ElasticSearch中。这个答案表明you could build the functionality with a script,但它会超级慢。

通常,ES不能很好地嵌套数据。它支持嵌套字段,但许多更高级的搜索功能无法在复杂的嵌套数据上运行。我的建议是对数据进行非规范化处理,以便每个翻译都由索引中的单个项目表示,并使用ID号码在它们之间建立链接。