Я использую Manticore Search с официальной библиотекой PHP. У меня есть список людей со списком причин, по которым наша система их не принимает («нарушения»). Индекс создается следующим образом:
Код: Выделить всё
[
'name' => ['type' => 'text'],
'violations' => ['type' => 'json']
// Other irrelevant fields
]
Индекс также имеет следующие параметры конфигурации:
Код: Выделить всё
'expand_keywords' => '1',
'index_exact_words' => '1',
'min_prefix_len' => '0',
'min_infix_len' => '2',
Нарушения Поле JSON хранит данные следующим образом:
Код: Выделить всё
{
"keys":["age"],
"messages":{"age":"This person is too young"}
}
Данные в формате JSON структурированы таким образом, поэтому я могу вывести на экран некоторые текстовые пояснения, а также сохранить ключи для целей поиска, но при необходимости их можно изменить.
p>
Я могу вручную искать записи, используя интерфейс Manticore MySQL, следующим образом:
Код: Выделить всё
SELECT *, ANY(x = 'age' FOR x in violations.keys) cond FROM people WHERE cond=1;
Однако я не вижу способа повторить это с помощью класса поиска PHP, например
Код: Выделить всё
$search->filter('violations', 'in', ['age'];
Существует ли в библиотеке PHP какой-либо механизм, позволяющий выполнять поиск там, где присутствует значение JSON, или мне нужно вернуться в режим SQL? Я бы предпочел по возможности избегать этого, поскольку это усложняет некоторые другие фильтры, которые мне приходится добавлять в запрос в зависимости от других условий в приложении.
Подробнее здесь:
https://stackoverflow.com/questions/785 ... alue-exist