【发布时间】:2017-01-07 02:56:07
【问题描述】:
我正在开发 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'
}
}
}
}
]
}
}
}
}
}
好的,这适用于门户索引,但将其包含在论坛索引中让我觉得我只是在与 elasticsearch 作斗争,而没有正确使用它。
所以我应该将它们保留在单独的索引上并获得一个将返回两个索引结果的过滤器,还是应该将它们合并到一个索引中,使用一个字段来保存源并可能标准化嵌套属性,或者有没有办法以多面的方式处理多个索引? (我知道,ES 2 中的聚合)
【问题讨论】:
-
请参阅此处了解“一个索引与多个”的权衡:stackoverflow.com/questions/14465668/… 至于类型,您可以通过调整 REST 端点和查询结构轻松按查询类型进行过滤。
-
谢谢@ryanlutgen,从我的收获来看,我需要坚持使用多个索引,因为每个来源都有数百万个文档。你能说我是否在搜索嵌套对象的正确路径上,以及如何像上面那样正确搜索不同的索引吗?
标签: elasticsearch