在Elasticsearch中单独索引或使用类型字段

时间:2016-08-30 17:48:48

标签: elasticsearch

我正在开发Elasticsearch服务,我们有多个来源,例如我们的支持服务单门户和论坛。目前,我将每个来源分成它自己的索引,因为每个来源都有一个子类型。票务门户当然会搜索票证(带有嵌套的回复),但也搜索用户等,因此门户网站索引下有多种类型。到目前为止简单的东西。

然而,我开始考虑合并索引并为类型前缀(portalTicket,portalUser,forumThread,forumUser等),因为我想要搜索两个来源,但也许有一个查询它们并将它们重新组合在一起的方法。我现在只是处理票据和线程,从小处开始,这是我到目前为止使用的两个简单映射:

{
    ticket : {
        properties : {
            replies : {
                type : 'nested'
            }
        }
    }
}

{
    thread : {
        properties : {
            posts : {
                type : 'nested'
            }
        }
    }
}

想要表明我使用具有不同名称的嵌套对象。我当然可以使用相同的名称,但是还会有其他元数据附加到票证和线程映射,这些数据也将是嵌套类型,这就引出了我的问题。当我在没有指定索引的情况下进行搜索时,我会遇到一些没有嵌套类型的问题,正如预期的那样。线程映射没有replies属性,它是posts。我可以在像这样的过滤器中使用index来解决它:

{
    filter : {
        indices : {
            index          : 'portal',
            no_match_query : 'none',
            query          : {
                bool : {
                    should : [
                        {
                            match : {
                                title : 'help'
                            }
                        },
                        {
                            nested : {
                                path  : 'replies',
                                query : {
                                    match : {
                                        'replies.text' : 'help'
                                    }
                                }
                            }
                        }
                    ]
                }
            }
        }
    }
}

好的,这适用于门户网站索引,但是将其包含在论坛索引中让我觉得我只是在与弹性搜索进行对抗,而不是正确使用它。

所以我应该将它们保存在单独的索引上并获得一个将返回两个索引结果的过滤器,或者我应该将它们合并到一个索引中,使用一个字段来保存源并可能规范化嵌套属性或者是否有办法以多面的方式处理多个指数? (我知道,ES 2中的聚合)

1 个答案:

答案 0 :(得分:0)

阅读这两篇文章(感谢评论者指出这些帖子):

我已经确定我的数据太不同了,我预期的文件数量(以及未来的添加量)意味着我应该使用不同的索引。

现在要学习如何搜索不同的索引,但这篇文章更多的是关于我应该使用哪种策略,所以我将为此开启一个新问题。