【发布时间】:2019-10-11 23:06:12
【问题描述】:
我正在创建一个仅用作terms filter 的查找索引。所以没有搜索/聚合,只有过滤和GETs。
我正在讨论这个查找索引的结构,每个文档是否应该包含我想要过滤的所有字段,或者我是否应该为每个字段创建一个索引。
例如,假设每个文档都属于一个用户。每个用户都有一个他们玩过的游戏、读过的书和看过的电影的列表。在搜索游戏/书籍/电影推荐时,我将使用术语过滤器来过滤掉他们已经互动过的那些项目。
我想知道我是否应该有一个带有文档映射的单个查找索引,例如:
users_index
{
'game_ids': [],
'movie_ids' : [],
'book_ids': []
}
或一个索引 per 查找值,例如:
user_games_index
{
'game_ids': []
}
user_movies_index
{
'movie_ids': []
}
user_books_index
{
'book_ids': []
}
一个索引的优点:
- 每个索引都有开销,所以越少越好
- 如果我想检索所有用户的信息,都在一个索引中
多个索引的优点:
根据update api docs,更新文档意味着首先检索整个内容。我将大量更新每个文档,这些数组可能会变得相当大(想想数千个 id)。更新书籍 ID 将检索所有游戏 ID,这会占用内存。如果它们在单独的索引中,我可以避免这种情况。
更容易维护我的东西
我应该注意,如果我使用多个索引,它只会是 4 或 5,每个索引大约有 500k 个文档。此外,每个索引只有 1 个主分片,没有副本,而且我在单个 m5.2xlarge EC2 实例(8 核,32G 内存)上。
这些统计数据是否太小以至于在这一点上并不重要,还是我应该支持一个或多个索引?
【问题讨论】:
标签: elasticsearch indexing information-retrieval