如何在Manticore Search PHP库中查询含指定JSON值的记录?
Manticore Search PHP库查询JSON数组值存在性的问题
背景
我正在使用Manticore Search官方PHP库,维护一个people人员索引,其中包含存储拒绝原因的violationsJSON字段:
- 索引结构:
[ 'name' => ['type' => 'text'], 'violations' => ['type' => 'json'] // 其他无关字段 ]
- 索引配置:
'expand_keywords' => '1', 'index_exact_words' => '1', 'min_prefix_len' => '0', 'min_infix_len' => '2',
violations字段的JSON数据格式:
{ "keys":["age"], "messages":{"age":"This person is too young"} }
该结构用于页面展示明文解释,同时存储关键词供搜索使用,结构可根据需要调整。
可行的SQL查询方式
通过Manticore的MySQL接口,我可以手动执行以下SQL语句实现需求:
SELECT *, ANY(x = 'age' FOR x in violations.keys) cond FROM people WHERE cond=1;
遇到的问题
尝试使用PHP库的筛选方法无法实现相同逻辑,比如:
$search->filter('violations', 'in', ['age']);
疑问
- PHP库中是否有原生支持查询JSON数组中是否存在指定值的机制?
- 是否必须切换到SQL模式查询?我希望尽量避免使用SQL模式,因为这会让应用中其他条件的查询筛选逻辑变得复杂。
内容的提问来源于stack exchange,提问作者fistameeny
相关产品推荐
相关产品推荐

