Соответствие приблизительной строке в Базовом Хранилище данных

Необходимость абстрактных свойств может указывать на проблемы проектирования. Хотя во многих ответах реализован тип шаблона шаблона , и он работает, он всегда выглядит несколько странно.

Давайте посмотрим на оригинальный пример:

abstract class Foo_Abstract {
    abstract public $tablename;
}

class Foo extends Foo_Abstract {
    //Foo must 'implement' $property
    public $tablename = 'users';   
}

Чтобы отметить что-то abstract, нужно указать, что это необходимо. Итак, обязательное значение (в данном случае) является обязательной зависимостью, поэтому ее следует передать конструктору во время создания экземпляра :

class Table
{
    private $name;

    public function __construct(string $name)
    {
        $this->name = $name;
    }

    public function name(): string
    {
        return $this->name;
    }
}

Тогда если вам действительно нужен более конкретный именованный класс, вы можете наследовать так:

final class UsersTable extends Table
{
    public function __construct()
    {
        parent::__construct('users');
    }
}

Это может быть полезно, если вы используете DI-контейнер и вам нужно передавать разные таблицы для разных объектов.

12
задан damdamdam 19 May 2009 в 10:18
поделиться

2 ответа

Вы хотите, чтобы ваш поиск был нечувствительным к диакритическим знакам, чтобы соответствовать «é» в pensée и «e» в pensee. Вы получите это, добавив [d] после атрибута. Вот так:

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(songTitle like[cd] %@)", yourSongSubstring];
'c' в [cd] означает нечувствительность к регистру.

Так как ваша строка может появляться в любом порядке в строке, которую вы ищете, вы можете токенизировать строку поиска ([... componentsByString: @ ""]), а затем создать предикат, например

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(songTitle like[cd] %@) and (songTitle like[cd] %@)", songToken1, songToken2];
Этот синтаксис для объединения предикатов выше может быть выключено, идёт по памяти.
3
ответ дан 2 December 2019 в 23:20
поделиться

Я считаю, что вы хотите использовать здесь SearchKit . Я говорю это так, как будто я только что облегчил вашу работу ... Я этого не делал, но в нем должны быть инструменты, необходимые для успеха здесь. LNC по-прежнему предлагает свой SearchKit Podcast бесплатно (очень приятно).

В этом случае каждый трек будет документом, и вам нужно будет найти хороший способ их индексировать с помощью идентификатор, который можно использовать для их поиска. Затем вы можете загрузить их с метаданными и выполнить поиск. Возможно, размещение заголовка «внутри» документа было бы здесь полезным для облегчения использования поиска по сходству ( kSKSearchOptionFindSimilar ). Это может сработать, а может и не сработать.

Вопрос, который вы задали, хороший, но, конечно, для этого нет отраслевого стандарта, потому что любой, кто хорошо решает эту проблему (то есть каждая основная поисковая система), хранит свои алгоритмы в строжайшем секрете. Это сложная проблема; никто не готов дать свой ответ.

2
ответ дан 2 December 2019 в 23:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: