【问题标题】:How to allow long autocomplete search list in laravel如何在 laravel 中允许长的自动完成搜索列表
【发布时间】:2018-11-29 17:40:31
【问题描述】:

我正在使用 Laravel 5 创建一个酒店预订系统,它将与第三方 API 集成以搜索世界各地的酒店。

在搜索表单中,有一个位置字段,用户可以在其中输入他们想要访问的城市,然后会根据输入的文本显示一个自动完成的下拉菜单。

我面临的问题是:来自世界各地的城市太多了。这份名单是超过一万个城市。由于此字段,网页一直在加载且无响应。

如何像 Expedia 显示的那样将所有城市放入自动完成列表中?

提前致谢。

【问题讨论】:

  • 这是个好主意,但是第三方API提供者给出了每个城市的ID,ID用于搜索酒店。所以我仍然需要从 API 提供者那里输入整个列表...
  • 如果只计算 10k 个城市;使用 Redis 作为缓存层和id => name 对并使用redis.io/commands/scan;维护 ElasticSearch 或 SOLR 集群似乎很容易(而且便宜),但事实并非如此。关于 ElasticSearch,你可以看到这个 youtube 视频 6.5/10 youtube.com/watch?v=waTWeJeFp4A

标签: laravel autocomplete


【解决方案1】:

此类网站(可能)使用ElisticSearchSOLR 等技术。 然而,Laravel 也使得使用像 Algolia 这样的第三方服务成为可能。但是,您可以将前 2 个安装在您自己的服务器上。阿尔戈利亚是有偿的。 https://laravel.com/docs/5.7/scout

所以我建议使用 Laravel Scout,因为您的问题被标记为 Laravel。然而,推荐的外部服务在一段时间后相当昂贵。我个人会推荐 Elasticsearch。显然,甚至还有一个包可以让您的应用程序和 Elasticseach 服务之间的连接更容易:https://github.com/babenkoivan/scout-elasticsearch-driver

http://okfnlabs.org/blog/2013/07/01/elasticsearch-query-tutorial.html

【讨论】:

  • @Kyslik 好吧,我可以将这个问题标记为过于宽泛,因为搜索是计算机科学的一个广泛领域。但是,我首先指出了因此而构建的支持服务是行业标准的方向。是的,我正在考虑更好地解释或链接到更广泛的答案。
  • 好吧,我确实做到了(标记为广泛/推荐用于第 3 方工具)。我认为我们可以通过 cmets 帮助 OP 并删除/关闭这个问题。
  • 您确定要链接到 5/6 年前的资源吗?
  • @Kyslik 但是,尽管有很多解决方案,但这仍然是一个有效的问题,即使在我目前工作的公司中,我也看到以非常糟糕的方式解决了问题。同事构建作为数据子集的 json 文件,或者他们构建通配符 SQL 查询。我认为这个答案可能会引导人们在 webapps 中搜索可能会做出更好的决定,
  • 哦,我同意;这对于小型团队(也许对于大型团队)来说是一个大问题,因为有很多选择,所以他们从未从事过搜索工作。我自己构建了一个搜索,它对我提供的数据集相当快,我们也考虑了 ES、SOLR,但仅服务器需求超出了项目可以支持的范围。
猜你喜欢
  • 2017-03-28
  • 2021-11-30
  • 2016-06-02
  • 2018-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多