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;
}