Hallo Heiko,
die Lösung aus der englischen Mailingliste scheint mir nicht die richtige zusein, aber man kann das mit Hilfe von regulären Ausdrücken machen:
{texte==#ENV{recherche}}
bzw. hier der komplette Code der Schleife:
<BOUCLE_textsuche(ARTICLES){texte==#ENV{recherche}}{par date}{inverse}{0,15}>
Erläuterung:
Im Prinzip recht es, als Kriterium der Schleife {texte==#ENV{recherche}} anzugeben, mit den Kriterien {par date} und {0,15} kann man zusätzlich Sortierreihenfolge und Ergebnismenge beeinflussen.
Das ist ein Hack, es gibt bestimmt bessere Lösungen, aber er funktioniert. Empfehlenswert ist diese Lösung nur bedingt, denn der Mustervergleich ist sehr rechenaufwendig und kann auf schmalbrüstigen Servern schon mal zu einem Timeout führen.
Die SPIP-Suchmaschine zeichnet sich durch enorme Geschwindigkeit bei extrem niedrigen Ressourcenverbrauch aus, weshalb man besser Lösungen ohne direktes Durchsuchen von Datenfeldern anstreben sollte.
Vielleicht kannst Du mal eine Schleife ausprobieren, die zunächst die Abfrage per SPIP-Suchmaschnine macht und in einer Unterschleife den Mustervergleich macht, so daß die Zahl der per regulärem Ausdruck zu durchsuchenden Artikel gering bleibt:
<BOUCLE_objektsuche(ARTICLES){recheche}{par date}{inverse}{0,15}>
<BOUCLE_textsuche(ARTICLES){texte==#ENV{recherche}}>
#TITRE etc.
</BOUCLE_textsuche>
</BOUCLE_objektsuche>
Was ich ebenfalls nicht getestet habe, ist das Verhalten bei mehreren Suchbegriffen im Eingabefeld. Im besten Fall werden exakte Entsprechungen des Suchstrings gefunden, im schlechtesten Fall wird gar nichts gefunden, weil der Browser Sonder- und Leerzeichen umkodiert.
Wenn Du ein Ergebnis im Stil von "finde Texte, bei denen alle Suchworte in beliebiger Reihenfolge mindestens einmal vorkommen" erhalten willst, kommst Du um eine selbstgeschrieben Funktion nicht herum, denn Du mußt den Suchstring zerlegen und dann einen regulären Ausdruck generieren.
Die SPIP Suchmaschine liefert in etwa solch ein Ergebnis, ermöglicht dabei jedoch nicht, bestimmt Datenfelder eines Objekts nicht zu berücksichtigen.
Mehr Infos zur SPIP Suchmaschine:
http://www.spip.net/fr_article1575.html (Französisch)
bzw.
http://www.spip.net/en_article3179.html (Englisch)
Viel Spaß weiterhin,
klaus++
Heiko Jansen schrieb:
klaus++ schrieb:
Wenn der Parameter nicht übergeben wird, wird er ignoriert und die Artikel aller Autoren werden angezeigt.
Hallo Klaus ,
vielen Dank für deine Mühe, aber vielleicht habe ich mich nicht richtig ausgedrückt, ich will nicht, dass Artikel von einem bestimten Autor nicht angezeigt werden, sondern nur, dass der Name des Autors keine Rolle spielt. Also wenn in einem Artikel (Also im Text des Artikels) der Name des Autors vorkommt, soll er auf jeden Fall auch im Suchergebniss angezeigt werden, auch wenn er vom Autor geschrieben wurde. Nicht aber sollen die Artikel angezeigt werden, in denen der Autor NUR der Autor ist.
Da gab es auf der englischen Mailginliste folgenden Vorschlag:
Hello,
This is an interesting question. There is no configuration for that, but you have two solutions.
The first one is not really good I think: modify the loop that show research results to exclude the articles that have as author one of the search keyword.
we first find the articles with matching authors:
<BOUCLE_authors(AUTEURS) {recherche}>
<BOUCLE_exclude(ARTICLES) {id_auteur} {doublons}>
</BOUCLE_exclude>
</BOUCLE_authors>
then we can display the rest of the articles, the doublons criterion will exclude the articles already found.
<BOUCLE_lesarticles(ARTICLES) {recherche} {doublons} {par points} {inverse}>
As you can see, we exclude totally the articles from the authors, which will probably exclude articles relevant from other features.
The second solution is better for the results, but needs maintenance at each update of SPIP you make as it implies modifying SPIP sources.
You should modify the file ecrire/inc_index.php3 and comment (add // at the begining of the line) the line 251 that is:
indexer_elements_associes('article', $id_objet, 'auteur', 10);
which would become:
//indexer_elements_associes('article', $id_objet, 'auteur', 10);
another solution, is to diminish the importance of the author for an article in the indexation:
indexer_elements_associes('article', $id_objet, 'auteur', 1);
Then, you will have to clean the tables and reindex the site from the admin page:
ecrire/admin_index.php3
Das will ich jetzt mal ausprobieren. Oder gibt es da ne Möglichkeit, das auch z.B. über mes_options.php3 oder mes_fonctions.php3 zu steuern?
viele Grüße
HEiko