elasticsearch:一个带有自定义类型的索引,用于区分文档模式与多个索引,每个文档类型一个?

cl25kdpy  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(1)|浏览(442)

我在es方面没有经验(我的背景更多的是关系数据库),我正在努力实现在我的web应用程序中有一个搜索栏来搜索它的全部内容(或者我愿意在es中索引的内容)的目标。
实现的体系结构是jamstack,gatsby应用程序从strapi应用程序(headlesscms)获取内容(有时在构建时,有时在运行时)。在中间,我开发了一个微服务,将strapi应用程序中创建的文档写入es数据库。此时,所有文档只有一个索引,而不管其类型如何。
我的问题是,随着应用程序的增长和不同类型的文档的创建(有时彼此非常不同,例如我可以有一篇文章(新闻)和一家医院),我很难正确地查询数据库,因为在进行查询时我必须定义许多特定的条件(以覆盖所有类型的文档)。
我的解决方案是只保留一个索引,并将查询分解为多个索引,当用户点击“搜索”按钮时,这些查询将运行,结果将在显示之前连接在一起,或者将唯一的索引分解为多个索引,每个文档一个索引,这会让我产生另一个疑问,是否可以一次查询多个索引并在查询中定义特定的索引字段?
哪种方法最好?我希望我能在这件事上说清楚。
提前谢谢。

a1o7rhls

a1o7rhls1#

根据您提供的示例,其中一种类型的文档可以是 news 另一种是 hospital ,创建多个索引是有意义的(但您还需要知道,您有多少不同类型的索引)。这两种方法都有优点和缺点,一旦您了解了它们,就可以根据您的用例选择一种。
在我开始列出优缺点之前,另一个问题的答案是,您可以使用multi-search api在一个搜索查询中查询多个索引。
单一索引的优点
减少多个索引的管理开销(这就是为什么我问您的应用程序中可能有多少这样的索引)。
更高性能的搜索查询,因为数据存在于单个位置。
欺骗
您正在为不同类型的文档编制索引,因此必须包含一个复杂的筛选器才能获取所需的数据。
相关性将不是很好,因为您有一个影响idf相似性算法(bm25)的混合文档,并影响相关性。
不同索引的优点
最好根据数据的属性将它们分开,以获得更好的相关结果。
您的搜索查询不会很复杂。
如果你有非常巨大的数据,那么打破数据,获得最佳的碎片大小和更好的性能是很有意义的。
欺骗
更多的管理开销。
如果需要在所有索引中搜索,则必须实现多个搜索并等待所有索引的搜索结果,这可能代价高昂。

相关问题