Typo3 - indexed search: Unterschied zwischen den Versionen
| Zeile 217: | Zeile 217: | ||
#plugin.tx_macinasearchbox_pi1.pidSearchpage = {$searchResultPage} | #plugin.tx_macinasearchbox_pi1.pidSearchpage = {$searchResultPage} | ||
</pre> | </pre> | ||
| + | |||
| + | === Suche nur in der aktuellen Sprache === | ||
| + | <pre> | ||
| + | # für die default-Sprache: | ||
| + | plugin.tx_indexedsearch._DEFAULT_PI_VARS.lang = 0 | ||
| + | |||
| + | # für die Sprache ?&L=1 | ||
| + | [globalVar = GP:L = 1] | ||
| + | plugin.tx_indexedsearch._DEFAULT_PI_VARS.lang = 1 | ||
| + | [global] | ||
| + | </pre> | ||
| + | |||
| + | Oder für jede Sprache gültig: | ||
| + | plugin.tx_indexedsearch._DEFAULT_PI_VARS.lang < config.sys_language_uid | ||
| + | |||
| + | ==== Sprachlabels ==== | ||
| + | Wie in Typo3 üblich z.B.: | ||
| + | <pre> | ||
| + | plugin.tx_indexedsearch._LOCAL_LANG.de.pi_list_browseresults_prev = << | ||
| + | plugin.tx_indexedsearch._LOCAL_LANG.de.pi_list_browseresults_page = | ||
| + | plugin.tx_indexedsearch._LOCAL_LANG.de.pi_list_browseresults_next = >> | ||
| + | plugin.tx_indexedsearch._LOCAL_LANG.de.pi_list_browseresults_display = ###TAG_BEGIN###%s###TAG_END### - ###TAG_BEGIN###%s###TAG_END### (###TAG_BEGIN###%s###TAG_END###) | ||
| + | </pre> | ||
| + | In manchen Versionen gibt es einen Fehler in der französichen Übersetzung deshalb: | ||
| + | plugin.tx_indexedsearch._LOCAL_LANG.fr.pi_list_browseresults_display = Résultat ###TAG_BEGIN###%s à %s###TAG_END### sur un total de ###TAG_BEGIN###%s###TAG_END### | ||
==== im Main Template ==== | ==== im Main Template ==== | ||
Version vom 27. April 2008, 07:05 Uhr
Suchergebnis verbessern
Es gibt einige Problemchen mit der Indexed Search die man beheben kann:
Suchbereich einschränken
Um zu verhindern, daß Metatags, Navigation etc. mit indiziert werden schränkt man den Suchbereich ein. Dafür stehen die Marker für den Suchbereich verwenden.
Ob das bei den Metatags funktioniert bleibt zu testen. Ansonsten kann auch im Quellcode der Bereich auskommentiert werden:
In der class.indexer.php die 6 Zeilen nach Zeile 1215
// get keywords and description metatags ...
Performance in der indexed Search Extension
Wenn es mehr Seiten werden kann die indexed Search Extension zum Performance Killer werden. Dafür gibt es mehrere Gründe:
1. Die Volltextsuche http://bugs.typo3.org/view.php?id=5089 Es gibt aus Gründen der Kompatibilität keinen fulltext index in den Tabellen. Daher schlägt Peter Russ im Bugtracker vor: fulltext index to index_fulltext.fulltext and index_words.baseword
2. changed query in class.tx_indexedsearch.php to use fulltext capabilites of MySql. Das ist im obigen Link im verlinkten diff File beschrieben. Großer Performance Gewinn, allerdings keine Teilsuche (typo findet auch typo2) mehr möglich. nochmal zu der Änderung zur Performance-Steigerung:
in der typo3/sysext/indexed_search/pi/class.tx_indexedsearch.php ungefähr Zeile 820 sollte muss case 1 bis 3 aukommentiert werden und case 10 noch angepast werden, so dass es dann so aussehen sollte:
// Perform search for word:
switch($theType) {
/*
* can't see any difference in this cases, but Kaspar might know
case '1':
$wSel = "IW.baseword LIKE
'%".$GLOBALS['TYPO3_DB']->quoteStr($sWord, 'index_words')."%'";
$res = $this->execPHashListQuery($wSel,' AND is_stopword=0');
break;
case '2':
$wSel = "IW.baseword LIKE '".$GLOBALS['TYPO3_DB']->quoteStr($sWord,
'index_words')."%'";
$res = $this->execPHashListQuery($wSel,' AND is_stopword=0');
break;
case '3':
$wSel = "IW.baseword LIKE
'%".$GLOBALS['TYPO3_DB']->quoteStr($sWord, 'index_words')."'";
$res = $this->execPHashListQuery($wSel,' AND is_stopword=0');
break;
*/
case '1':
case '2':
case '3':
$wSel='match(IW.baseword)
against("'.$GLOBALS['TYPO3_DB']->quoteStr($sWord, 'index_words').'")';
$res = $this->execPHashListQuery($wSel,' AND is_stopword=0');
break;
case '10':
$wSel = 'IW.metaphone = '.$this->indexerObj->metaphone($sWord);
$res = $this->execPHashListQuery($wSel,' AND is_stopword=0');
break;
case '20':
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
'ISEC.phash',
'index_section ISEC, index_fulltext IFT',
'match(IFT.fulltextdata)
against(\''.$GLOBALS['TYPO3_DB']->quoteStr($sWord,
'index_fulltext').'\') AND
ISEC.phash = IFT.phash
'.$this->sectionTableWhere(),
'ISEC.phash'
);
$wSel = '1=1';
if ($this->piVars['type']==20) $this->piVars['order'] = 'mtime';
// If there is a fulltext search for a sentence there is a likeliness
that sorting cannot be done by the rankings from the rel-table (because
no relations will exist for the sentence in the word-table). So
therefore mtime is used instaed. It is not required, but otherwise some
hits may be left out.
break;
default:
$wSel = 'IW.wid = '.$hash = $this->indexerObj->md5inthash($sWord);
$res = $this->execPHashListQuery($wSel,' AND is_stopword=0');
break;
}
...
Weiterhin muss wie beschreiben z.b mittels phpmyadmin-Interface der Index-Typ des Indizes fulltext in der Tabelle index_fulltext auf FULLTEXT gesetzt werden, sowie in der Inidize baseword in der Tabelle index_words auf FULLTEXT.
In der t.dev-Liste haben sie lange darüber diskutiert, wie es integrierbar ist. Problem ist wohl, dass der FULLTEXT-Index in anderen DB-Systemen nicht unterstützt wird, und die Sache ja kompatibel bleiben soll. Es gab ein paar gute Lösungsansätze und irgendwann wirds sicher konfigurierbar.
Noch zu der Frage:
> Geht eine täglich Re-Indizierung nicht ziemlich auf en Traffic bzw. > Serverperformance? Ganz davon abgesehen, dass ich von cronjob's auch > nicht viel weiss... Wie sähe denn so ein cronjob aus?
Sinnvollerweise realisiert man dass so, dass die Re-Indexierung in der Nacht läuft. Weiterhin kann man dann ausschalten, dass die Seiten im Frontend überhaupt indexiert werden - bringt also sogar einen Performance Vorteil.
3. Mehrfach indizierte Inhalte bei tt_news Lösung aus der Mailing Liste:
Die mehrfachindizierung bei tt_news habe ich hoffentlich dadurch gelöst, indem ich dontUseBackPid = 1 verwende und nur jeweils die SINGLE-News-Seite indizieren lasse. D. h. ich habe bei den LIST und LATEST Seiten "Nicht suchen" aktiviert. Ist das so richtig?
Ein Suchfeld ins Template einbinden
Extension einbinden
Indexed Search Engine (indexed_search)installieren (Standardmäßig vorhanden)
Translation Handling -> Übersetzungen aktualisieren
HTML-Template & CSS
Beispiel:
<div id="searchBox">
</div>
Einschränken des Suchbereichs im Template
Im Template werden folgende Marker eingesetzt:
<!--TYPO3SEARCH_begin--> ... <!--TYPO3SEARCH_end-->
Sind keine Marker vorhanden wird alles Durchsucht ist nur einer der Marker vorhanden wird alles nach (begin Marker) bzw. vor (end Marker) dem Marker durchsucht
CSS
#searchBox input{
width: 140px;
}
#searchBox input.searchBox-button{
position: relative;
border: none;
width: auto;
top: 2px;
}
div.tx-indexedsearch-whatis{
padding-left: 12px;
}
Konfiguration der Extension
TypoScript indexedSearch-config (V1.1)
Constants
searchRoot = 1 searchResultPage = 4 searchPic = fileadmin/common/images/lupe.gif
Setup
plugin.tx_indexedsearch._CSS_DEFAULT_STYLE >
page.config.index_enable = 1
config{
# Index-Suche einschalten
index_enable = 1
# Externe Dateien auch durchsuchen (pdf,doc...benötigt Erweiterungen)
index_externals = 0
}
plugin.tx_indexedsearch{
# Startpunkte der Suche (12,45...)
search.rootPidList = {$searchRoot}
# Diverse Optionen zur Anzeige im Frontend...
show.rules = 0
show.resultNumber = 0
blind.sections = 1
show.L1sections = 0
show.L2sections = 0
show.advancedSearchLink = 0
# auf bestimmte Medientypen einschränken
# search.mediaList = pdf, doc
}
# Temporäres Objekt für das Suchfeld (in neueren Versionen auch Templates möglich
# es kann auch die macina Searchbox eingesetzt werden (Template Support Mehrsprachigkeit...)
temp.searchBox = TEXT
temp.searchBox.insertData = 1
temp.searchBox.value (
<div class="searchBox">
<form action="index.php?id={$searchResultPage}&tx_indexedsearch[sword]" method="post">
<input type="text" name="tx_indexedsearch[sword]" value="Suche" class="searchBox-field" title="Suche" />
<input type="image" src="{$searchPic}" alt="Start" title="Start" class="searchBox-button"/>
<input type="hidden" name="stype" value="L0" />
<input type="hidden" name="scols" value="tt_content.header-bodytext-imagecaption" />
<input type="hidden" name="locationData" value="{$searchResultPage}:pages:{$searchResultPage}" />
</form>
</div>
)
#plugin.tx_macinasearchbox_pi1.pidSearchpage = {$searchResultPage}
Suche nur in der aktuellen Sprache
# für die default-Sprache: plugin.tx_indexedsearch._DEFAULT_PI_VARS.lang = 0 # für die Sprache ?&L=1 [globalVar = GP:L = 1] plugin.tx_indexedsearch._DEFAULT_PI_VARS.lang = 1 [global]
Oder für jede Sprache gültig: plugin.tx_indexedsearch._DEFAULT_PI_VARS.lang < config.sys_language_uid
Sprachlabels
Wie in Typo3 üblich z.B.:
plugin.tx_indexedsearch._LOCAL_LANG.de.pi_list_browseresults_prev = << plugin.tx_indexedsearch._LOCAL_LANG.de.pi_list_browseresults_page = plugin.tx_indexedsearch._LOCAL_LANG.de.pi_list_browseresults_next = >> plugin.tx_indexedsearch._LOCAL_LANG.de.pi_list_browseresults_display = ###TAG_BEGIN###%s###TAG_END### - ###TAG_BEGIN###%s###TAG_END### (###TAG_BEGIN###%s###TAG_END###)
In manchen Versionen gibt es einen Fehler in der französichen Übersetzung deshalb:
plugin.tx_indexedsearch._LOCAL_LANG.fr.pi_list_browseresults_display = Résultat ###TAG_BEGIN###%s à %s###TAG_END### sur un total de ###TAG_BEGIN###%s###TAG_END###
im Main Template
Setup:
### SearchBox ### subparts.searchBox < temp.searchBox
Tutorial von Marlies Cohen
When I first started with Typo3 Indexed Search gave me some problems. It is a very basic extension.
Place this line of code in the Setup of your TypoScript of your rootpage:
# Indexed Search activated page.config.index_enable = 1
Now comes the trick to get your pages indexed.
-> Log out of Typo3
-> Go to your home page
-> Log back in to Typo3
-> Now your pages should be cached and searchable
The reason for this is that as long as you are logged in to Typo3 your pages are not cached, once you log out and view pages they are cached. Knowing this saves a lot of hassles.
Clearing Indexed Search Cache
-> switch to the "Info" module on the left and
-> choose "indexed search" on the right dropdown (in the details view). now you can see all your pages that have been indexed
-> click on the trash-item to delete the indexed record for a specific page-tree (attention: recursive!).