我正在开发一个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战斗,而不是正确使用它。
所以我应该把它们放在单独的索引上,并得到一个过滤器,它将返回两个索引的结果,或者我应该把它们合并成一个索引,使用一个字段来保存源,并可能规范化嵌套的属性,或者有一种方法来处理多个索引在一个面方式?(我知道,聚合在es2)
阅读这两篇文章(感谢评论者指出这些):
- 弹性搜索,多个索引vs一个索引和不同数据集的类型?
- https://www.elastic.co/blog/index-vs-type
我已经决定我的数据太不同了,我预期的文档数量(以及未来的添加)意味着我应该使用不同的索引。
现在学习如何搜索不同的索引但这篇文章更多的是关于我应该使用哪种策略所以我要打开一个新的问题