Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel TNTsearch大型SQL数据库表的自定义索引创建和使用_Sql_Laravel_Indexing - Fatal编程技术网

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

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

以下是我的处境、背景和困境

形势

我对拉拉维尔还不太熟悉,还在学习诀窍。我最近安装了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数据库表,每个省有超过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或弹性搜索。**不想付钱**可能会因为你的方法而失败。