在弹性搜索中搜索子文档

时间:2015-03-28 08:02:56

标签: python search indexing elasticsearch

我有一份表格

的文件
'search':
[
    {
        id:'1',
        "content": [
            {
                "text": "random text .....",
                "time": 150.023
            },
            {
                "text": "random text .....",
                "time": 160.023
            }
          ]
    },

    {
        id:'2',
        "content": [
            {
                "text": "random text .....",
                "time": 150.023
            },
            {
                "text": "random text .....",
                "time": 160.023
            }
          ]
    }
    .
    .
    .
]

我想搜索文本字段并获取其ID,文本和时间,例如

我的示例文档和索引搜索如下所示

'search':
[
    {
        id:'1',
        "content": [
            {
                "text": "Algorithm and Data structure",
                "time": 150.023
            },
            {
                "text": "Selection Sort",
                "time": 160.023
            }
          ]
    },

    {
        id:'2',
        "content": [
            {
                "text": "Database and schema",
                "time": 1530.023
            }
          ]
    }
    .
    .
    .
]

现在当我搜索" text:Algorithm"然后我需要id:' 1'," text":"算法和数据结构"和"时间":150.023。

如何使用elasticsearch获得上述结果。请提供一些解决方案。提前谢谢。

1 个答案:

答案 0 :(得分:1)

在elasticsearch中,搜索是按文档进行的。您可以在搜索中单独获取某些字段,但不能在数组中查找。 这里最好的解决方案是将搜索字段声明为nested,以便您可以进行元素特定搜索,然后获取整个文档,然后在客户端检索您要查找的元素。

或者,您可以更改数据建模并围绕搜索元素建模文档。

这意味着不要将单个文档维护为 -

'search':
[
    {
        id:'1',
        "content": [
            {
                "text": "random text .....",
                "time": 150.023
            },
            {
                "text": "random text .....",
                "time": 160.023
            }
          ]
    },

    {
        id:'2',
        "content": [
            {
                "text": "random text .....",
                "time": 150.023
            },
            {
                "text": "random text .....",
                "time": 160.023
            }
          ]
    }
    .
    .
    .
]

您可以在单个文档看起来像上面的文档中维护多个文档的模型 -

{
  "id": "1",
  "content": {
    "text": "random text .....",
    "time": 150.023
  }
}