我在一个具有全文搜索功能的搜索仪表板上工作,由ES支持。搜索最初将由UI仪表板使用。我计划在UI仪表板和ES之间有一个应用程序web服务(WS) api层,它将路由业务搜索到ES。
WS可以有多个客户端,每个客户端都有自己的业务用例和复杂的数据需求(基本上是响应字段)。它们有许多实体和大量的字段。每个客户端都需要指定它想要返回哪些字段的实体。
为了支持这种动态变化的需求,一种方法可以是让WS通过ES (具有访问控制和对ES响应的后期转换等预验证)。WS API看起来与ES API完全一样,UI应该通过JS客户端构建ES查询并将其发送到WS,WS在进行访问控制后将从ES获取数据。
我是ES的新手,对这种方法持怀疑态度。在这种方法中是否会有任何特殊的挑战。我的一位同事以前在ES上工作过,但总是使用后端Java客户端,所以他不太确定。
我查了一下ES Js的客户有一个官方的here
这里有一些上下文:
我们有大约4个不同的实体(可以在未来增加)与全文和关键字类型的字段。典型的搜索可能有多个筛选器和搜索项,并希望指定结果字段。此外,一些搜索将跨实体,而另一些搜索将针对单个实体。我们为每个实体维护一个单独的实体。
发布于 2020-03-26 12:11:02
我从你的帖子中理解到的是,下面是你想要在高水平上实现的目标。
未来WS可能有多个客户端,每个客户端都有自己的业务用例和复杂的数据需求(基本上是响应字段)
由于您不确定如何做到这一点,您正在考虑仅在您的前端从Javascript构建Elasticsearch查询。我不是一个非常喜欢这种方法的人,因为它暴露了你是如何构建查询的,如果一些黑客知道下面这样的关键信息,那么就会让你的整个ES集群陷入瘫痪:
上面只是几个例子,并将添加更多信息。
正确的方法
因为你已经有了一个后端,你将在那里检查访问,在那里只构建Elasticsearch查询,并且你甚至有你的队友知道它的优势。
要构建复杂的响应字段,可以使用 ,使用它可以在搜索请求中指定要在搜索结果中返回的所有字段。
https://stackoverflow.com/questions/60860809
复制相似问题