这是我的处境,背景和困境。
情况
我是Laravel的新手,仍然在学习绳索。我最近安装了TNTSearch和Laravel Scout,并能够使用以下配置创建模型索引。我使用控制台命令php artisan tntsearch:import "App\Models\Product"
创建了索引,并且可以使用App\Models\Product::search($keyword)->get()
成功进行模糊搜索。
config / scout.php
'tntsearch' => [
'storage' => storage_path() . '/index',
'fuzziness' => 'auto',
'fuzzy' => [
'prefix_length' => 2,
'max_expansions' => 50,
'distance' => 4,
],
'asYouType' => true
],
上下文
我有一个SQL数据库表,其中每个省细分了超过3万条产品记录(加拿大项目),而不是搜索整个索引并随后按市场过滤,我想为每个市场创建一个索引并启动搜索给定的市场。我相信它将加快搜索速度,并避免返回结果,以后将其丢弃!因此,基本上每个省份都有一个产品索引文件(即products_on.index,
products_qc.index
,...)
困境/问题
我找不到如何创建这样的索引,无法自动更新以及如何使用它的信息。我在Internet上搜索了教程/指南,但只能找到我几乎无法汇总的稀缺信息。如果有人可以向我指出正确的方向或指导我如何实施这种方法,我将不胜感激。
没有答案是错误的,任何点点滴滴的信息都可以极大地帮助我“站起来”。
编辑(2018年7月30日):
我仍然没有找到请求的答案,但是搜索的次数越多,结论索引与模型的关联就越多,并且每个模型的索引不能超过一个。因此,我将不得不从原始Listings
模型(Listings_QC,Listings_ON等)为每个市场创建一个模型扩展。然后为每个市场创建索引并从中搜索(Listings_QC::search(...)
)。
我不希望基于数据创建模型!这是一个好的方法/做法吗?
答案 0 :(得分:1)
已解决!
由于我对Laravel搜索索引的经验不足,通常使我走错了方向!
我终于找到了一个文档,解释了如何使用searchBoolean()
来搜索“ and”。如下修改我的配置以添加searchBoolean:
'tntsearch' => [
'storage' => storage_path() . '/index',
'fuzziness' => 'auto',
'fuzzy' => [
'prefix_length' => 2,
'max_expansions' => 50,
'distance' => 4,
],
'asYouType' => true,
'searchBoolean' => true
],
然后使用模型的方法toSearchableArray()
指定市场,并将市场添加到任何请求的seach关键字。
例如,在带有“ Alsace”的搜索结果中列出质量控制市场,我以
Listings::search('Alsace QC')->get()
。
Voilà!可能会帮助其他人碰到同样的“墙”!