ElasticSearch AutoSuggest 内置 REST API
ElasticSearch AutoSuggest Built-In REST API
目前我有一个 spring 启动微服务,它在 MongoDB 中存储项目列表。
现在我想在按项目名称搜索时添加自动建议功能(partial/fuzzy 搜索)。
我正在考虑为此使用 ElasticSearch 的内置 REST API。
我的计划是每次在 MongoDB 中插入/更新数据时发送 POST 和 PUT 到 ElasticSearch 的 REST 端点。
现在网络客户端可以只使用 ElasticSearch 的 REST API 根据用户在搜索栏上键入的关键字获取自动建议数据。
这是使用 ElasticSearch 的预期方式吗?
我们如何扩展这个?
还是使用 spring java 和 elasticsearch 客户端创建一个单独的微服务来实现同样的事情更好?
您可以使用两种方式实现功能,这实际上是一个基于意见的问题,但我仍然会尝试根据我的经验列出优缺点。
我在这里假设 mongoDB 是数据的真实来源,而 ES 仅用于搜索。
更新同一应用程序中的 ES(Elasticsearch),更新 mongo。
这将为您节省微服务带来的额外开销:就像部署另一个应用程序一样,在下文中,释放包含相同 POJO 或实体的 jar,供您的 mongo 和 ES 应用程序使用。主要开销 是额外的网络跃点 ,因为 如果在这种情况下 ,一旦您的 mongo 应用程序更新成功,那么您将将请求发送到 ES 应用程序,后者又更新 elasticsearch 应用程序,您可以将请求并行发送到 Elasticsearch 应用程序 但这会导致不一致,因为更新可能会在 MongoDB,因此 ES 和 MongoDB 将不会同步。
为 Elasticsearch 创建单独的微服务
只要在您的真实来源和 elasticsearch 之间保持一致性,就会为您带来微服务的典型优势,例如关注点分离、更快的发布周期、更简单的复杂性代码、语言和框架的选择等、提高开发人员的生产力等。
同样,您的问题不是针对 elasticsearch 的,它更像是微服务与单体应用的对比,这完全取决于您的用例,您可以在网上找到很多关于这些的争论,但您绝对应该关注其中一个我最喜欢的是 uber architect's regret on scaling it to 1000 microservices.
目前我有一个 spring 启动微服务,它在 MongoDB 中存储项目列表。
现在我想在按项目名称搜索时添加自动建议功能(partial/fuzzy 搜索)。
我正在考虑为此使用 ElasticSearch 的内置 REST API。
我的计划是每次在 MongoDB 中插入/更新数据时发送 POST 和 PUT 到 ElasticSearch 的 REST 端点。
现在网络客户端可以只使用 ElasticSearch 的 REST API 根据用户在搜索栏上键入的关键字获取自动建议数据。
这是使用 ElasticSearch 的预期方式吗? 我们如何扩展这个? 还是使用 spring java 和 elasticsearch 客户端创建一个单独的微服务来实现同样的事情更好?
您可以使用两种方式实现功能,这实际上是一个基于意见的问题,但我仍然会尝试根据我的经验列出优缺点。
我在这里假设 mongoDB 是数据的真实来源,而 ES 仅用于搜索。
更新同一应用程序中的 ES(Elasticsearch),更新 mongo。
这将为您节省微服务带来的额外开销:就像部署另一个应用程序一样,在下文中,释放包含相同 POJO 或实体的 jar,供您的 mongo 和 ES 应用程序使用。主要开销 是额外的网络跃点 ,因为 如果在这种情况下 ,一旦您的 mongo 应用程序更新成功,那么您将将请求发送到 ES 应用程序,后者又更新 elasticsearch 应用程序,您可以将请求并行发送到 Elasticsearch 应用程序 但这会导致不一致,因为更新可能会在 MongoDB,因此 ES 和 MongoDB 将不会同步。
为 Elasticsearch 创建单独的微服务
只要在您的真实来源和 elasticsearch 之间保持一致性,就会为您带来微服务的典型优势,例如关注点分离、更快的发布周期、更简单的复杂性代码、语言和框架的选择等、提高开发人员的生产力等。
同样,您的问题不是针对 elasticsearch 的,它更像是微服务与单体应用的对比,这完全取决于您的用例,您可以在网上找到很多关于这些的争论,但您绝对应该关注其中一个我最喜欢的是 uber architect's regret on scaling it to 1000 microservices.