如何在elasticsearch中返回一组嵌套结果

时间:2017-07-17 07:12:08

标签: elasticsearch

我有这样的文档结构:

<div class="alert alert-danger fade in">
   <a href="#" class="close" data-dismiss="alert" aria-label="close" >&times;</a>Don't forget Ramsey's Birthday
</div>

我想搜索主文档和嵌套部分,然后返回一组结果,其中嵌套的public class Client { Context context; Intent intent; String value = ""; public Client(Activity activity) { context = activity; intent = ((Activity) context).getIntent(); value = intent.getStringExtra("String_i_need"); } } 部分是顶级,以便文档在结果中出现两次或更多次如果[{ id: XXX, title: 'A Title', variations: [ {attribute: 'value', created_at: date}, ... ] }, ... ] 匹配。我也希望以variation顺序返回这些结果。这是“转动”吗?

e.g。搜索可能是“variations包含X的所有变体,{Y} created_at,按attribute排序”

我可以创建一个单独的索引,其中变体是顶级文档,但是如何在没有大量重复数据的情况下包含实际的顶级文档?

实际例子:

https://www.muchbetteradventures.com/adventures/discover/是基于顶级文档作为假日的搜索。

https://www.muchbetteradventures.com/adventures/timeline/是节假日的个人离职,即假期可以在此列表中出现多次,因为它可能有多次出发。

目前,第一页是使用ES生成的,第二页是数据库查询。我们希望在第二个视图中添加更多的ES搜索和速度。

1 个答案:

答案 0 :(得分:0)

根据您提供的信息,我尝试根据父子关系为您设置最小工作solution,并且您希望仅根据父文档和子文档中的属性值获取嵌套/子文档。 / p>

PUT index_name
{
  "mappings": {
    "parent_document" : {
      "properties": {
        "title" : {
          "type": "text"
        }
      }
    },
    "child_document" : {
      "_parent": {
        "type": "parent_document"
      },
      "properties": {
        "attribute" : {
          "type": "text"
        }
      }
    }
  }
}


POST index_name/parent_document
{
  "title" : "document three"
}

注意:将父查询参数作为您要将此子项关联到的父文档的ID传递。

POST index_name/child_document?parent=AV1PoQdYA2MvrCm0IPxT
{
        "attribute": "value9",
        "created_at": "2017-08-08"
}

POST index_name/child_document/_search
{
    "query": {
        "bool": {
            "must": [{
                    "has_parent": {
                        "parent_type": "parent_document",
                        "query": {
                            "bool": {
                                "must": [{
                                    "term": {
                                        "title": {
                                            "value": "document"
                                        }
                                    }
                                }]
                            }
                        }
                    }
                },
                {
                    "term": {
                        "attribute": {
                            "value": "value9"
                        }
                    }
                }
            ]
        }
    }
}

希望这会让你开始。 感谢