ezfind solr / eztika Installation + Ausführung

15.03.2013 | eZ Publish

Installation wie hier: eZ+Find+Demystified+-+Installing+and+configuring+a+multi-core+Solr-eZ+Find+2.6+instance+with+eZ+Tika beschrieben.

Dann im ../htdocs/solr/java - Folder solr starten mit:

java -Dezfind -Dsolr.solr.home=/usr/local/zend/apache2/htdocs/solr/cores -server -d64 -Xmx768m -Xms768m -XX:+UseParallelGC -XX:+AggressiveOpts -XX:NewRatio=5 -jar start.jar

Indexing aus dem Server-(ezpublish)-Verzeichnis starten mit:

php extension/ezfind/bin/php/updatesearchindexsolr.php -s your_admin_siteaccess

WICHTIG:wenn der Index neu erzeugt werden soll, reicht es nicht, nur das index-Verzeichnis zu leeren. Solr VERWEIGERT DANACH DEN DIENST. Dieses muß auch gelöscht werden (also nur das data-Dir übrig lassen). Danach wird der index beim Startup neu erzeugt und es kann re-indiziert werden. 

Im ezfind/bin/scripts- Verzeichnis finden sich startup-Scripte für diverse Linux-Distributionen, um solr als Service einzurichten.

Wenn eine multicore-Installation vorgenommen wurde, kann das solr-Admininterface (nicht in Chrome!!) im Browser gestartet werden:

http://localhost:8983/solr/y2/admin/

Hier kann man direkt Queries testen. Folgende Query zeigt z.B. ein XML-Resultset, das zeigt, welche Attribute von solr durchsucht werden können:

meta_main_node_id_si:2718

Das Resultset sieht so aus:

Man erkennt dann, daß das Feld attr_publish_date_dt vorhanden ist, was dem eZ-Attribute article/published_date (data_map-Attribut!) entspricht.Um Datumsabfragen zu testen könnte man z.B. folgenden Querystring in der Adminkonsole eingeben:

attr_publish_date_dt:[1970-01-01T00:00:01Z/DAY TO 2013-12-31T23:59:59Z/DAY+1DAY ]

Wenn das Resultset dem erwünschten Resultat entspricht, kann der ezfind-Fetch z.B. so aussehen:

{set $search = fetch('ezfind', 'search', hash(
                                'query',  '',
                                'query_handler', 'ezpublish',
                                'class_id', array('article','image','file','flash_player'),
                                'limit', '99',
                                'sort_by', hash('published', 'desc'),
                                'subtree_array', array($node.node_id),
                                  'filter', 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('folder/publish_date:[',$sstart,'/DAY TO ',$send,'/DAY+1DAY ]')),
                                                )
                                    ))
                                 }

Datumsabfragen müssen solr in einem bestimmten Format übergeben werden, in älteren eZ-Publish-Installationen muß man sich hierfür einen Templateoperator bauen, in neueren sollte es ein datetime-preset dafür geben, testen mit: {currentdate()|datetime('solr')}

Um das Resultat anzuzeigen ist nur noch ein Zwischenschritt nötig:

{set $result = $search['SearchResult']} 

Darüber kann geloopt werden:

 <h2>ezfind Suche ergab  {$search['SearchCount']} Treffer</h2>
                        {foreach $result as $node}
                                {node_view_gui view='line' content_node=$node}
                        {/foreach}
                                 

Wie man sieht, liefert der Fetch-Array noch andere Items, u.a. den Count und nicht nur die Nodes.