我们正在建立Amazon Elasticsearch Service(运行Elasticsearch version 2.3)。
我们有不同类型的数据(我目前认为是不同的文档类型在相同的索引)。
我们在一个应用程序中有一个通用搜索,我们想要一个内联自动完成函数,也就是说,一个完成建议器从所有不同的数据(文档)类型返回命中。这怎么可能实现呢?
当查询建议时,你必须指定一个索引,所以这就是为什么我想把所有的数据保持在同一个索引中。根据文档,补全建议器考虑索引中的所有文档。
为第一种文档类型设置完成建议器非常简单,而且效果很好。然而,据我所知,您在查询时指定建议字段。如果不是我们在为第二个文档类型设置映射时得到的错误消息:
,那就太好了。类型:illegal_argument_exception原因:"[suggest]被定义为映射[name_of_document_type]中的对象,但该名称已用于其他类型的字段"
写这个问题,我发现在一个建议查询中可以指定多个建议者。也许这就是我们要解的?(例如,从Y个建议者那里获得X个结果,我们比较分数,得到我们想要呈现给用户的1个建议。)
Elasticsearch良好数据设计的核心原则之一(与许多数据存储一样)是优化数据存储以方便阅读。通常,这意味着包含复制。
考虑到这一点,我建议有一个单独的自动完成索引和一个专门为建议查询设计的映射。
每当你插入或写入其他文档时,将其映射到你的自动完成类型,并同时在你的自动完成索引中添加或更新它(或者,根据它需要的最新程度,创建一个离线进程来更新你的自动完成索引,例如每天)。
然后,当你做建议查询时,你可以只使用你的自动完成索引,而不用担心处理不同类型的文档和不同的字段。