Frage zur Suchmaschine

Hallo,

eine kleine Frage zur SPIP-Suchmaschine: Bei einem Test mit meinem Namen bekamm ich eine Menge Artikel zurück, in denen mein Name zwar als Autor auftaucht, aber nicht im eigentlichen Text der Artikel. Kann man die Suchmaschine so konfigurieren, dass die Namen der Autoren nicht mitdurchsucht werden oder für das Ergebniss irrelevant sind?

viele Grüße
Heiko

Hallo Heiko,
Du kannst Deine Suche einschränken, indem Du Artikel, die Du selber geschrieben hast, ausdrücklich aus der Ergebnisliste ausschließt:

<BOUCLE_suche(RECHERCHE){id_auteur<>nn}>

Achtung - habe ich nicht getestet :wink:

Seit SPIP 1.8 kannst Du auch mit dem Tag #ENV arbeiten, d.h. Du kannst jeden Parameter per URL übergeben.

<BOUCLE_suche(RECHERCHE){id_auteur<>#ENV{id_auteur}}>
erlaubt, die Autoren-ID per URL zu übergeben.

Wenn Du das noch weiter treiben möchtest, kannst Du jetzt auch die Suche durch den Namen des Autors begrenzen, mit Hilfe von regulären Ausdrücken kannst Du sogar jede beliebige eigenartige Zeichenfolge als Kriterium verwenden.

Wenn Du das beabsichtigst, bewegst Du Dich in einem Bereich, der noch nicht offiziell dokumentiert ist. Ich schaue gerne noch einmal für Dich nach ...

Grusz, klaus++

Heiko schrieb:

Hallo,

eine kleine Frage zur SPIP-Suchmaschine: Bei einem Test mit meinem Namen bekamm ich eine Menge Artikel zurück, in denen mein Name zwar als Autor auftaucht, aber nicht im eigentlichen Text der Artikel. Kann man die Suchmaschine so konfigurieren, dass die Namen der Autoren nicht mitdurchsucht werden oder für das Ergebniss irrelevant sind?

viele Grüße
Heiko
_______________________________________________
Spip-de@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-de

Hallo Heiko,
sorry, die letzte Mail enthielt einen Fehler. So funktioniert der Code:

{id_auteur!=#ENV{id_auteur}}
bzw. hier der vollständige Code für eine Sucvhschleife:
<BOUCLE_artikel(ARTICLES){recherche}{id_auteur!=#ENV{id_auteur}}{par date}{inverse}{0,15}>

Du übergibts in der URL den Parameter id_auteur=Nummer, um Artikel dieses Autors aus den Ergebnissen auszuschließen:
http://www.deinserver.de/spip/recherche.php3?recherche=Suchbegriffe&id_auteur=27

Wenn der Parameter nicht übergeben wird, wird er ignoriert und die Artikel aller Autoren werden angezeigt.

Viel Spaß,
klaus++

klaus++ schrieb:

Hallo Heiko,
Du kannst Deine Suche einschränken, indem Du Artikel, die Du selber geschrieben hast, ausdrücklich aus der Ergebnisliste ausschließt:

<BOUCLE_suche(RECHERCHE){id_auteur<>nn}>

Achtung - habe ich nicht getestet :wink:

Seit SPIP 1.8 kannst Du auch mit dem Tag #ENV arbeiten, d.h. Du kannst jeden Parameter per URL übergeben.

<BOUCLE_suche(RECHERCHE){id_auteur<>#ENV{id_auteur}}>
erlaubt, die Autoren-ID per URL zu übergeben.

Wenn Du das noch weiter treiben möchtest, kannst Du jetzt auch die Suche durch den Namen des Autors begrenzen, mit Hilfe von regulären Ausdrücken kannst Du sogar jede beliebige eigenartige Zeichenfolge als Kriterium verwenden.

Wenn Du das beabsichtigst, bewegst Du Dich in einem Bereich, der noch nicht offiziell dokumentiert ist. Ich schaue gerne noch einmal für Dich nach ...

Grusz, klaus++

Heiko schrieb:

Hallo,

eine kleine Frage zur SPIP-Suchmaschine: Bei einem Test mit meinem Namen bekamm ich eine Menge Artikel zurück, in denen mein Name zwar als Autor auftaucht, aber nicht im eigentlichen Text der Artikel. Kann man die Suchmaschine so konfigurieren, dass die Namen der Autoren nicht mitdurchsucht werden oder für das Ergebniss irrelevant sind?

viele Grüße
Heiko
_______________________________________________
Spip-de@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-de

_______________________________________________
Spip-de@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-de

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

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