Laravel TNTsearch定制索引的创建和对大型SQL数据库表的使用

时间:2018-07-27 04:09:53

标签: sql laravel indexing

这是我的处境,背景和困境。

情况

我是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(...))。

我不希望基于数据创建模型!这是一个好的方法/做法吗?

1 个答案:

答案 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à!可能会帮助其他人碰到同样的“墙”!