2014-09-25 57 views
0

这个问题也许是一个奇怪的问题,但我的雇主要求我找出答案,因此我会。使用solr索引外部休息API,可能吗?

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

因此,相反,我的雇主已经阅读了关于Solr的内容,并坚信可以对REST API进行索引,以便我们使用Solr来搜索我们想要的一个搜索请求。我不太确定。这是否可行,并且是否可行?

+0

请参阅http://stackoverflow.com/questions/8294337/how-can-i-search-all-field-in-solr-that-c​​ontain-the-keywords我认为这两个答案都解决您的问题。 – orangepips 2014-09-29 01:46:50

回答

0

是的,当然可以为上述要求提出解决方案。基本上solr是一个全文搜索引擎,默认情况下所有的字段在solr中被索引。可以通过分析器和标记器组合在这些字段上执行不同类型的操作。您可以将所有可搜索字段映射到一个特定字段(称为复制字段,即城市名称和街道名称 - >文本名称),然后在该字段上执行搜索以根据需要获取结果。

solr是RESTful搜索引擎,它以xml和可选的JSON格式提供数据。它是一个真正有用的平台,可以处理庞大的数据,并且不会像计算那样帮助分析部分。

很少的好处包括自动提示,高亮,面,同义词搜索,正克搜索,自动校正等

+0

但Solr必须从REST API索引搜索结果,对吧?所以基本上我们必须根据以前的搜索建立我们自己的文档数据库。如果不清楚,REST API不是我们的,我们不能直接访问它提供的数据。 – benbjo 2014-09-25 12:48:32

+0

是的,确切地说。您必须从您的休息API中捕获数据,并在每个常规插页中将其提供给solr引擎。 – 2014-09-26 04:42:18

0

我想你应该发送的功能要求REST API维护者支持复合搜索。

您可以从REST API下载整个数据库并创建自己的数据库,您可以使用自定义查询编制索引和搜索数据库,并且必须与REST API保持同步。我不认为你想这样做。它可以工作,但所谓的REST API通常不会将客户端与执行链接和语义注释的服务分开。所以恐怕API的任何改变都会很容易中断。

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

Solr是一个具有类似REST的API的独立企业搜索服务器。 您通过HTTP,通过XML,JSON,CSV或 二进制文件将文档(称为“索引”)。您可以通过HTTP GET查询并接收XML,JSON,CSV 或二进制结果。

0

一旦实际拥有数据,您应该毫无困难地使用数据导入处理程序(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示例。