这个问题可能是一个奇怪的问题,但是我的雇主要求我找出答案,因此我会。
在我们的应用程序中,我们使用外部REST API来搜索一些数据。此REST API可以提供多种类型的数据,但一次只能查找一种类型的数据。例如城市名称和街道名称。在我们的应用中,我们强制用户选择在搜索时要查找的数据类型,但现在我们的用户并不想这样做。因此,如果他们搜索例如“洛杉矶”。他们希望结果包含"洛杉矶"和失去的街道'。为了使我们能够立即实现这一目标,我们必须在REST API中进行两次单独的搜索并合并结果。
因此,我的雇主已经阅读了Solr,并坚持认为可以索引REST API,以便我们使用Solr在一个搜索请求中搜索我们想要的内容。我不太确定。是否有可能,是否可行?
答案 0 :(得分:0)
肯定可以为上述要求提出解决方案。基本上solr是一个全文搜索引擎,默认情况下所有字段都在solr中索引。可以通过分析器和标记器组合在这些字段上执行不同类型的操作。您可以将所有可搜索字段映射到一个特定字段(称为复制字段,例如城市名称和街道名称 - >文本名称),并在此字段上运行搜索以根据需要获得结果。
solr是RESTful搜索引擎,它以xml和可选的JSON格式提供数据。它是一个非常有用的平台,可以运行大量数据,并且不会像计算一样帮助分析。
很少有好处包括自动建议,突出显示,方面,同义词搜索,n-gram搜索,自动更正等。
答案 1 :(得分:0)
我认为您应该向REST API维护者发送功能请求以支持复合搜索。
您唯一可以从REST API下载整个数据库,并创建一个自己的数据库,您可以使用自定义查询对其进行索引和搜索,并且必须与REST API保持同步。我认为你不想这样做。它可以工作,但所谓的REST API通常不会通过链接和语义注释将客户端与服务的实现分离。因此,我担心任何API的更改都会轻易破解。
Afaik Solr是一种支持全文搜索并具有REST界面的存储解决方案。
Solr是一个独立的企业搜索服务器,具有类似REST的API。 您通过XML,JSON,CSV或者将文档放入其中(称为“索引”) 通过HTTP二进制。您通过HTTP GET查询它并接收XML,JSON,CSV 或二进制结果。
答案 2 :(得分: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示例。