ergnuor/sphinx-config

PHP Sphinx 配置助手

2.0.0 2020-04-20 20:30 UTC

This package is auto-updated.

Last update: 2024-09-11 21:02:32 UTC


README

Build Status

关于

这是一个 Sphinx 配置助手,它扩展了块继承,并允许您通过使用占位符的方式将配置集成到您的应用程序中。

使用方法

独立使用

在这种情况下,您可以使用常见的控制台命令: searchd -c /path/to/sphinx/config/preciousConfig.conf

并且 /path/to/sphinx/config/preciousConfig.conf 文件应包含以下内容

#!/usr/bin/php

<?php
// generated by composer --dump-autoload
require_once '/path/to/autoload/autoload.php';

use Ergnuor\SphinxConfig\Config;

$config = Config::phpArrayToNativeConfigStdout('/path/to/config/source');
$config ->transform('preciousConfig');

应用程序集成

您可以将 SphinxConfig 集成到您的应用程序中,并创建脚本以生成配置文件并运行所需的 Sphinx 命令。所以脚本可能看起来像这样

//...

use Ergnuor\SphinxConfig\Config;

$config = Config::phpArrayToNativeConfigFile(
    '/path/to/config/source',
    '/path/to/sphinx/config'
);
$config->transform('preciousConfig');

exec('searchd -c /path/to/sphinnx/config/presiousConfig.conf');

//...

在任何情况下,您都需要描述一个源 配置

先决条件

SphinxConfig 除了 PHP 5.6+ 外没有依赖项

结构

配置结构

目前,配置由 PHP 数组描述(计划有更多格式)。下面是配置结构的简单示例

<?php
return [
   'source' => [
       'main' => [
           'sql_query_pre' => [
               'SET NAMES utf8',
               'SET CHARACTER SET utf8'
           ],
           // ... all other setting
       ],
   ],

   'index' => [
       'main' => [
           'source' => 'main',
           'path' => '/path/to/main',
           // ... all other setting
       ],
   ],

   'indexer' => [
       'mem_limit' => '1024M',
       // ... all other setting
   ],

   'searchd' => [
       'listen' => 'localhost:9306:mysql41',
       // ... all other setting
   ],

   'common' => [
       'lemmatizer_base' => '/usr/local/share/sphinx/dicts/',
       // ... all other setting
   ],
];

Sourceindex 部分 由块组成。块,以及 indexersearchdcommon 部分,包含参数。

文件结构约定

下面是配置的典型完整文件结构

├── preciousConfig
│   ├── sectionType
│   │   └── blockName.php      # Block is located in a separate file
│   └── sectionType.php        # Section is located in a separate file
└── preciousConfig.php         # Whole configuration is located in one file

您不需要像上面那样全面地描述配置的结构。您可以选择以下选项之一,或者根据自己的意愿组合它们

  • 整个配置位于一个文件中。
    例如: /path/to/configs/preciousConfig.php
  • 部分位于单独的文件中。
    例如: /path/to/configs/preciousConfig/sectionType.php
  • 块位于单独的文件中。
    例如: /path/to/configs/preciousConfig/sectionType/blockName.php 。此选项可能对存储由不同配置使用的常用参数很有用。有关更多信息,请参阅 继承配置之间的部分

继承

要继承块,应使用具有父块名称的值的 'extends' 参数。
例如

<?php
return [
   'source' => [
       'main' => [
           // ... other block settings
       ],
       'delta' => [
           'extends' => 'main',
           // ... pther block settings
       ]
   ],
];

多值参数的继承

默认情况下,多值参数的值会附加到父块参数的值上。要忽略父块中的值,您必须使用 :clear 修饰符。
例如

'sql_query_pre:clear' => [
   'SET NAMES utf8',
   // ... other pre queries
],

您还可以为多值参数的值指定别名。因此,您可以在子块中引用该值并覆盖它。
例如

<?php
return [
    'source' => [
        'main' => [
            'sql_query_pre' => [
                'SET NAMES utf8',
                // ... other pre queries
                'sph_counter' => 'INSERT INTO sphCounter  (indexingStartedAt, caption)
                    VALUES(NOW(), \'main\')
                    ON DUPLICATE KEY UPDATE indexingStartedAt = now()'
            ],
            // ... other block settings
        ],
        'delta' => [
            'extends' => 'main',
            'sql_query_pre' => [
                'sph_counter' => 'INSERT INTO sphCounter  (indexingStartedAt, caption)
                    VALUES(NOW(), \'delta\')
                    ON DUPLICATE KEY UPDATE indexingStartedAt = now()'
             ],
             // ... other block settings
        ]
    ],
];

结果得到以下配置

source main {
    sql_query_pre = SET NAMES utf8
    // ... other pre queries
    sql_query_pre = INSERT INTO sphCounter  (indexingStartedAt, caption) \
        VALUES(NOW(), 'main') \
        ON DUPLICATE KEY UPDATE indexingStartedAt = now()
    // ... other block settings
}

source delta : main {
    sql_query_pre = SET NAMES utf8
    // ... other pre queries
    sql_query_pre = INSERT INTO sphCounter  (indexingStartedAt, caption) \
        VALUES(NOW(), 'delta') \
        ON DUPLICATE KEY UPDATE indexingStartedAt = now()
    // ... other block settings
}

使用这种方法,您不需要从父块复制多值参数的所有值。此示例可以通过使用 占位符 来进一步缩短。

配置之间的继承

您可以从其他配置中引用块。为此,您需要指定配置名称,并使用 @ 符号将其与块名称分开。请注意,配置应位于同一目录中。

使用示例是存储数据库连接设置在 /path/to/configs/common/source/connection.php 块中,并通过 'extends' => 'common@connection' 参数从其他配置中引用它。

请注意,在内部表示中,indexersearchdcommon 部分被转换为包含自命名块的章节。这使得它们可以像 sourceindex 部分一样使用。因此,就像在最后一个例子中一样,您可以将 indexersearchdcommon 部分的常用设置存储在单独的块中,并从中继承。

占位符

Sphinx 参数的每个值都可能包含一个格式为 ::path.to.value: 的占位符。占位符使用点表示法,因此可以从多维数组中提取值。替换值本身也可以包含占位符。因此,占位符是递归引用的。

有两种传递值的方式

  • 您可以使用 setPlaceholderValues() 方法传递整个配置的全局值。
    这可能对传递来自您应用程序的值很有用,例如数据库连接参数。
  • 可以使用 'placeholderValues' 参数为每个块指定局部值,
    使用此功能,我们可以简化多值参数继承部分的示例
return [
   'source' => [
       'main' => [
           'sql_query_pre' => [
               'SET NAMES utf8',
               // ... other queries
               'INSERT INTO sphCounter  (indexingStartedAt, caption)
                   VALUES(NOW(), \'::sourceName::\')
                   ON DUPLICATE KEY UPDATE indexingStartedAt = now()'
           ],
           'placeholderValues' => [
               'sourceName' => 'main',
           ],
           // ... other block settings
       ],
       'delta' => [
           'extends' => 'main',
           'placeholderValues' => [
               'sourceName' => 'delta',
           ],
           // ... other block settings
       ]
   ],
];

结果得到以下配置

source main {
    sql_query_pre = SET NAMES utf8
    // ... other pre queries
    sql_query_pre = INSERT INTO sphCounter  (indexingStartedAt, caption) \
        VALUES(NOW(), 'main') \
        ON DUPLICATE KEY UPDATE indexingStartedAt = now()
    // ... other block settings
}

source delta : main {
    sql_query_pre = SET NAMES utf8
    // ... other pre queries
    sql_query_pre = INSERT INTO sphCounter  (indexingStartedAt, caption) \
        VALUES(NOW(), 'delta') \
        ON DUPLICATE KEY UPDATE indexingStartedAt = now()
    // ... other block settings
}

参数值

多行值会自动添加一个尾随斜杠。这在格式化查询时很有用。

自定义参数

如果参数的名称以下划线开头,则该参数将被忽略。这允许您添加用于内部使用的参数,例如,如果配置正在预处理,并且您想要能够配置此过程。

配置参数列表

  • 'extends'
    指定父块的名称。可以引用同一目录中另一个配置的块。为此,您必须指定与块名称分开的配置名称,使用 @ 符号。
    'extends' => 'blockName'
    'extends' => 'otherConfig@blockName'
  • 'placeholderValues'
    占位符的值,
  • 'isPseudo'
    将块标记为伪块。伪块不会出现在结果配置中。如果您想创建一个仅用于存储其他块中常见参数的容器块,则这可能对继承目的很有用。

许可证

本项目根据 Apache 2.0 许可证授权 - 有关详细信息,请参阅 LICENSE 文件。