Contents filtern nach eztags geht normalerweise nur mit einem extended-Attribut-Filter, weil die Tags in extra DB-Tabellen abgelegt werden.solr hat damit aber keine Probleme. Ein Fetch mit Filter nac
Contents filtern nach eztags geht normalerweise nur mit einem extended-Attribut-Filter, weil die Tags in extra DB-Tabellen abgelegt werden.solr hat damit aber keine Probleme. Ein Fetch mit Filter nach eztags sieht genauso aus wie einer nach einem beliebigen anderen Attribut:
{set $search = fetch('ezfind', 'search', hash(
'query', '',
'query_handler', 'ezpublish',
'class_id', array('article','article_mainpage','image','file','flash_player','gallery'),
'limit', $page_limit,
'sort_by', hash('published', 'desc'),
'filter', array('and', concat('path:',$node.node_id), concat('meta_main_path_string_ms:/*/',$node.node_id,'/????/'),
array( 'or',
array(concat('file/publish_date:[',$sstart,'/DAY TO ',$send,'/DAY+1DAY ]')),
array(concat('image/publish_date:[',$sstart,'/DAY TO ',$send,'/DAY+1DAY ]')),
array(concat('flash_player/publish_date:[',$sstart,'/DAY TO ',$send,'/DAY+1DAY ]')),
array(concat('gallery/publish_date:[',$sstart,'/DAY TO ',$send,'/DAY+1DAY ]')),
array(concat('article_mainpage/publish_date:[',$sstart,'/DAY TO ',$send,'/DAY+1DAY ]')),
array(concat('article/publish_date:[',$sstart,'/DAY TO ',$send,'/DAY+1DAY ]')),
),
cond(gt($tags_query|count, 0), array( 'or',
concat('image/tags:(',$tags_query,')'),
concat('file/tags:(',$tags_query,')'),
concat('article/tags:(',$tags_query,')'),
concat('article_mainpage/tags:(',$tags_query,')'),
concat('flash_player/tags:(',$tags_query,')'),
concat('gallery/tags:(',$tags_query,')')),
),
),
))
}
Etwas seltsam ist, daß man die Suche nach einem Subtree nicht in der Tiefe einschränken kann. Hier muß man Workarounds entwickeln, zB mittels Abfrage der meta_main_path_string_ms, der der $path_array-Variable entspricht. Man könnte also ein conditional einbauen, das die Tiefe des Patharrays abfragt und dann die Contents nach der Länge des Path-Strings filtert:
Hier wird das mittels concat('meta_main_path_string_ms:/*/',$node.node_id,'/????/ versucht. Es werden also nur Contents zurückgegeben, die eine Ebene unter der Node_id liegen und (genau) 4 Stellen haben. Eleganter wäre ein Fetch, der mit Regex arbeitet. Folgendes funktioniert komischerweise auf der Solr-Admin-Konsole, aber nicht mehr in einem ez-Template:
meta_main_path_string_ms:/*/<node.node_id>/(0-9)*/
Eckige Klammern gehen gar nicht (haben in solr eine andere Bedeutung (ranges). Dies hier geht auch nicht:
meta_main_path_string_ms:/*/<node.node_id>/(0-9)+/