【问题标题】:Laravel TNTsearch custom index creation and usage for large SQL database tableLaravel TNTsearch 大型 SQL 数据库表的自定义索引创建和使用
【发布时间】:2019-01-04 03:32:54
【问题描述】:

这是我的情况、背景和困境。

情况

我对 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,...)

困境/问题

我无法找到如何创建这样的索引、让它自动更新以及如何使用它。我在互联网上搜寻教程/指导,只能找到我几乎无法汇总的稀缺信息。如果有人能指出正确的方向或指导我如何实现这样的事情,我将不胜感激。

没有答案是错误的,任何点点滴滴的信息都可以极大地帮助我“跟上进度”。

编辑(2018 年 7 月 30 日):

我仍然没有找到我的请求的答案,但我搜索的越多,我就越能得出结论,搜索索引与模型“绑定”,并且每个模型不可能有多个索引。因此,我必须从原始Listings 模型(Listings_QC、Listings_ON、...)为每个市场创建一个模型扩展。然后为每个市场创建一个索引并从中搜索 (Listings_QC::search(...))。

我不热衷于根据数据创建模型!这是一个好的方法/做法吗?

【问题讨论】:

    标签: sql laravel indexing


    【解决方案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() 指定市场,并将市场添加到任何请求的搜索关键字中。

    例如,在 QC 市场中使用“Alsace”列出搜索,我将搜索启动为 Listings::search('Alsace QC')->get().

    瞧!可以帮助其他人碰上同样的“墙”!

    【讨论】:

    • 距离您发布此内容已有一年多。任何下一个解决方法?上面的解决方案看起来是一个合乎逻辑的解释。将尝试此操作并在此处更新。
    • Hemant,由于数据量太大,TNTSearch 更新时间过长,最终我最终还是使用了 MySql 内部全文搜索索引。但这种解决方法效果很好。
    • 我同意。 TNTSearch 很棒,但是大型数据库的开销太大了。我的数据集大小约为 2.5m,但索引变得很痛苦。此外,我的数据集还太小,无法使用 Algolia 或 Elastic Search。 ** 不想付钱** 可能会因你的方法而失败。
    猜你喜欢
    • 1970-01-01
    • 2012-07-28
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多