function solr_machinetags_explode($mt, $add_lazy8s = 1) { list($ns, $rest) = explode(":", $mt, 2); list($pred, $value) = explode("=", $rest, 2); $parts = array("{$ns}:", "{$ns}:{$pred}=", "{$ns}:{$pred}={$value}", "={$value}", ":{$pred}=", ":{$pred}={$value}"); if ($add_lazy8s) { $count = count($parts); for ($i = 0; $i < $count; $i++) { $parts[$i] = solr_machinetags_add_lazy8s($parts[$i]); } } return $parts; }
function solr_machinetags_query_for_path_hierarchy($mt, $field, $more = array()) { list($ns, $pred, $value) = solr_machinetags_explode($mt); $k = array(); if ($ns != '*') { $k[] = solr_machinetags_add_lazy8s($ns); } if ($pred != '*') { $k[] = solr_machinetags_add_lazy8s($pred); } $k = count($k) ? implode("/", $k) : ''; $v = $v == '*' ? solr_machinetags_add_lazy8s($value) : ''; $query = array(); if ($k) { $query[] = "{$field}:{$k}/*"; } $values = $value ? explode(" ", $value) : array(); $count = count($values); for ($i = 0; $i < $count; $i++) { $v = solr_machinetags_add_lazy8s($values[$i]); if ($count == 1) { $q = "{$field}:*/{$v}"; } else { if ($i == 0) { $q = "{$field}:{$k}/{$v}*"; } else { if ($i == $count - 1) { $q = "{$field}:{$k}/*{$v}"; } else { $q = "{$field}:{$k}/*{$v}*"; } } } $query[] = $q; } $q = implode(" AND ", $query); return $q; }