【问题标题】:Indexing external rest api with solr, possible?用solr索引外部rest api,可能吗?
【发布时间】:2014-11-20 04:21:09
【问题描述】:

这个问题可能很奇怪,但我的雇主要求我找出答案,所以我会的。

在我们的应用程序中,我们使用外部 REST api 来搜索一些数据。这个 REST api 可以传递多种类型的数据,但一次只能查找一种类型的数据。例如城市名称和街道名称。在我们的应用程序中,我们强制用户在搜索时选择要查找的数据类型,但现在我们的用户不想这样做。因此,如果他们搜索“los”,他们希望结果同时包含“Los Angeles”和“Losing Street”。为了让我们现在能够做到这一点,我们必须在 REST API 中进行两次单独的搜索并合并结果。

因此,我的雇主已经阅读了有关 Solr 的信息,并坚持认为可以索引 REST API,以便我们使用 Solr 在一个搜索请求中搜索我们想要的内容。我不太确定。有可能吗,是否可行?

【问题讨论】:

标签: java rest search solr indexing


【解决方案1】:

是的,绝对有可能针对上述要求提出解决方案。基本上 solr 是一个全文搜索引擎,所有字段都默认在 solr 中建立索引。可以通过分析器和分词器组合对这些字段进行不同类型的操作。您可以将所有可搜索字段映射到一个特定字段(称为复制字段,即城市名称和街道名称 -> 文本名称)并在这一字段上进行搜索以获得所需的结果。

solr 是 RESTful 搜索引擎,它以 xml 和可选的 JSON 格式提供数据。它非常有用的平台可以处理大量数据,并且无助于计算分析部分。

很少有好处包括自动建议、突出显示、构面、同义词搜索、n-gram 搜索、自动更正等。

【讨论】:

  • 但是 Solr 必须从 REST API 索引搜索结果,对吗?所以基本上我们必须根据以前的搜索建立自己的文档数据库。如果不清楚,REST API 不是我们的,我们无法直接访问它提供的数据。
  • 是的,完全正确。您必须从您的 REST API 中捕获数据,并在每个定期间隔将其提供给 solr 引擎。
【解决方案2】:

我认为您应该向 REST API 维护者发送功能请求以支持复合搜索。

您唯一能做的就是从 REST API 下载整个数据库,并创建一个自己的数据库,然后您可以使用自定义查询对其进行索引和搜索,并且您必须与 REST API 保持同步。我不认为你想那样做。它会起作用,但所谓的 REST API 通常不会通过链接和语义注释将客户端与服务的实现分离。所以我担心它会因为 API 的任何变化而轻易崩溃。

Afaik Solr 是一个支持全文搜索并具有 REST 接口的存储解决方案。

Solr 是一个独立的企业搜索服务器,具有类似 REST 的 API。 您通过 XML、JSON、CSV 或 HTTP 上的二进制文件。您通过 HTTP GET 查询它并接收 XML、JSON、CSV 或二进制结果。

【讨论】:

    【解决方案3】:

    一旦您真正拥有数据,您应该可以使用数据导入处理程序 (DIH)、Solr 的 RESTful 接口或类似 Spring Data Solr 之类的东西将数据从 REST API 发布到 Solr。棘手的部分是您将如何“抓取”第三方 REST API 数据?

    根据 REST API 提供程序是否为您提供任何方式来对数据进行分页,即按时间顺序或字母顺序,您可以在 Solr 之外编写一个程序来轮询 REST API,然后将数据存储在本地数据库中将其发布到 Solr。如果 REST API 提供程序允许您检索在特定时间后更新的新记录或更改的记录,这将更容易,这样您的轮询是有效的,并且仅在初始完整索引后检索少量数据。一些 REST 提供程序允许使用 webhook 来通知您的应用程序他们已经更新了 API 中的数据。这可能可行,也可能不可行,具体取决于数据量以及您是否可以通过用户帐户等限制它以仅包含您需要的内容。

    将第三方数据存储在 Solr 之外的本地数据库中很重要,因为 Solr 的索引数据文件是易变的,有时需要在进行配置更改后删除。这样,您可以编写一个流程将数据从数据库重新发布到 Solr,而无需再次爬取 REST API。

    为了定期处理轮询,您可以使用 Apache Camel 或 Spring Integration 以及 Quartz Scheduler。这两个都支持 REST 端点,您还可以查看 Solr 附带的 DIH 示例。

    【讨论】:

      猜你喜欢
      • 2018-02-15
      • 1970-01-01
      • 2017-08-29
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-06
      • 1970-01-01
      相关资源
      最近更新 更多