Laravel TNTsearch大型SQL数据库表的自定义索引创建和使用
以下是我的处境、背景和困境 形势 我对拉拉维尔还不太熟悉,还在学习诀窍。我最近安装了TNTSearch和Laravel Scout,并能够使用下面的配置创建模型索引。我使用控制台命令Laravel TNTsearch大型SQL数据库表的自定义索引创建和使用,sql,laravel,indexing,Sql,Laravel,Indexing,以下是我的处境、背景和困境 形势 我对拉拉维尔还不太熟悉,还在学习诀窍。我最近安装了TNTSearch和Laravel Scout,并能够使用下面的配置创建模型索引。我使用控制台命令php artisan tntsearch:import“App\Models\Product”创建了索引,并且可以使用App\Models\Product::search($keyword)->get()成功地进行模糊搜索 config/scout.php 'tntsearch' => [ 'stor
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数据库表,每个省有超过30k+的产品记录(加拿大项目),我不想搜索整个索引,然后按市场进行筛选,我想为每个市场创建一个索引,并启动对给定市场的搜索。我相信这将加快搜索速度,避免返回结果,这些结果将被丢弃!因此,基本上每个省都有一个产品索引文件(即产品索引,
产品质量控制索引,
,…)
困境/问题
我无法找到如何创建这样一个索引,让它自动更新,以及如何使用它。我在互联网上搜寻教程/指导,只能找到我几乎无法整理的稀缺信息。如果有人能为我指出正确的方向或指导我如何实施这样的事情,我将不胜感激
没有答案是错误的,任何零碎的信息都能极大地帮助我“跟上进度”
编辑(2018年7月30日):
我仍然没有找到我的请求的答案,但是我搜索得越多,我就越觉得搜索索引与模型“绑定”在一起,而且每个模型不可能有多个索引。因此,我必须从原始的Listings
模型(Listings\u QC,Listings\u ON,…)为每个市场创建一个模型扩展。然后根据每个市场创建一个索引并从中进行搜索(列表\u QC::search(…)
)
我不热衷于基于数据创建模型!这是一个好的方法/实践吗?已解决强>
我对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”对QC市场进行列表搜索,我将作为
Listings::search('Alsace QC')->get()
瞧!可能会帮助其他人撞上同样的“墙” 已解决强>
我对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”对QC市场进行列表搜索,我将作为
Listings::search('Alsace QC')->get()
瞧!可能会帮助其他人撞上同样的“墙” 你已经有一年多没有发布过这个了。还有其他解决办法吗?上述解决方案看起来是一个合乎逻辑的解释。Hemant,我最终使用了MySql内部全文搜索索引,因为数据量使得TNTSearch的更新过于繁重和冗长。但这种变通方法很有效,我同意TNTSearch
很好,但是对于较大的数据库来说,开销太大了。我的数据集大小大约为2.5米,但索引正在成为一个难题。此外,我的数据集还太小,无法使用Algolia或弹性搜索。**不想付钱**可能会因为你的方法而失败。你发布这篇文章已经有一年多了。还有其他解决办法吗?上述解决方案看起来是一个合乎逻辑的解释。Hemant,我最终使用了MySql内部全文搜索索引,因为数据量使得TNTSearch的更新过于繁重和冗长。但这种变通方法很有效,我同意TNTSearch
很好,但是对于较大的数据库来说,开销太大了。我的数据集大小大约为2.5米,但索引正在成为一个难题。此外,我的数据集还太小,无法使用Algolia或弹性搜索。**不想付钱**可能会因为你的方法而失败。