hopeter1018/doctrine-full-text-search-bundle

此包添加 doctrine 全文搜索功能

1.0.3 2020-08-06 03:04 UTC

This package is auto-updated.

Last update: 2024-09-06 12:09:35 UTC


README

简介

此包旨在启用 doctrine 全文搜索。我知道有更好的选择,如 elasticsearch。

安装

需要此包

composer require hopeter1018/doctrine-full-text-search-bundle

添加到内核

Symfony 4+ 或 Symfony Flex

添加 /config/bundles.php

return [
  ...,
  HoPeter1018\DoctrineFullTextSearchBundle\HoPeter1018DoctrineFullTextSearchBundle::class => ['all' => true],
];

Symfony 2+

添加 /app/AppKernel.php

$bundles = [
  ...,
  new HoPeter1018\DoctrineFullTextSearchBundle\HoPeter1018DoctrineFullTextSearchBundle(),
];

添加到 doctrine 配置

doctrine:
  orm:
    entity_managers:
      mappings:
        HoPeter1018DoctrineFullTextSearchBundle: ~

配置

hopeter1018_doctrine_full_text_search:
  # No config yet

用法

实体

namespace App\Entity;

use HoPeter1018\DoctrineFullTextSearchBundle\Annotation as Fts;
use HoPeter1018\DoctrineFullTextSearchBundle\Formatter\DateTimeFormatter;

/**
 * @Fts\Entity(
 *     columns={
 *         "__property_name_1__": @Fts\Column,
 *         "__property_name_2__": @Fts\Column(formatter=DateTimeFormatter::class),
 *     },
 *     columnGroups={
 *         "__group_name_1__": @Fts\ColumnGroup(columns={
 *             "__property_name_1__": @Fts\Column,
 *             "__property_name_2__": @Fts\Column,
 *         })
 *     }
 * )
 */
class TheEntity
{
    /**
     * @Fts\Column
     * @ORM\Column(type="string", length=255)
     */
    private $propertyName1;

    /**
     * @Fts\Column
     */
    public function methodName1()
    {
        return 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.';
    }
}

通过仓库使用

use HoPeter1018\DoctrineFullTextSearchBundle\Entity\FullTextSearchIndex;

$fullTextSearchIndexRepo = $em->getRepository(FullTextSearchIndex::class);

$ids = $fullTextSearchIndexRepo->search('~~ The search keywords ~~', TheEntity::class, ['__name-property/group/method__']);

$repo = $em->getRepository(TheEntity::class);
$list = $repo->findBy(['id' => $ids]);

待办事项

  • 添加模式以实现每张表的 FTS 索引
  • 实体
    • Trait 用于 PERENTITY 模式
  • 仓库
    • Trait 用于搜索
  • 增强注解
    • 添加更多属性
  • 添加命令到
    • 重新索引
    • 搜索
  • 添加辅助到
    • SonataAdmin
    • ApiPlatform
  • 检查不同的 id 类型