Jump to content

API:Suchen und Finden

From mediawiki.org
This page is a translated version of the page API:Search and discovery and the translation is 100% complete.

MediaWiki, seine Erweiterungen und und seine Schwesterprojekte bieten enormes Potenzial, um Wissen durch Suchen zu entdecken. Das Search-Platform-Team entwickelt den Mechanismus, Werkzeuge und Dienste, um dies zu tun.

Benutzer können Informationen in MediaWiki finden, indem sie sie direkt suchen und in Wikidata, indem sie Help:Navigation in Wikidata lesen.

MediaWiki

Die MediaWiki API hat unterschiedliche Module mit Bezug zu Suchen. Du kannst am /w/api.php-Eingangspunkt jedes Wikis Abfragen stellen und dir die generierte Hilfe ansehen oder auf Special:ApiSandbox API-Abfrageparameter eintragen.

Suchmodule

action=opensearch
Siehe API:OpenSearch . Gibt Suchergebnisse im OpenSearch-Format aus, jeweils mit Erweiterung:TextExtracts in Wikimedia-Projekten. Generierte API-Hilfe ansehen
action=languagesearch
Nach Sprachnamen in einem beliebigen Skript suchen. Generierte API-Hilfe ansehen

Abfragelisten-Submodule

Diese Abfrage-Submodule geben eine Liste von Wiki-Seiten aus, die Such-Kriterien erfĂŒllen und geben teilweise zusĂ€tzliche Informationen ĂŒber jede Seite aus. DarĂŒber hinaus kannst du jedes als Generator nutzen, um viele andere Eigenschaften zu den zurĂŒckgegebenen Seiten bereitzustellen, wie das Einleitungsbild, Ausschnitt und/oder Seitenbeschreibung.

action=query list=prefixsearch
Ruft Titel von Wiki-Seiten mit dem angegebenen PrĂ€fix ab. Siehe den Artikel Seiteninfo in Suchergebnissen. Siehe die Modul-Dokumentation fĂŒr API:PrĂ€fixsuche und sieh dir die generierte API-Hilfe an.
action=query list=search
Nutzt die Wiki-Suchmaschine, um passende Seiten zu finden. In Wikimedia-Wikis bietet es Suchergebnisse der CirrusSearch, die typische Informationen zu Suchergebnissen, wie Text-Ausschnitte und SeitengrĂ¶ĂŸe ausgibt. Siehe die Modul-Dokumentation fĂŒr API:Suche und sieh dir die generierte API-Hilfe an
action=query list=geosearch
Wenn die GeoData-Erweiterung im Wiki installiert ist, gibt dies Wiki-Seiten in der NĂ€he mit geografischen Informationen aus. Siehe den Artikel Nahegelegene-Orte-Betrachter, die Modul-Dokumentation fĂŒr die Geosuche und sieh dir die generierte API-Hilfe an.

Clients

Kommandozeile

Aus der Kommandozeile kannst du die API abfragen, indem du cURL nutzt, um die API-Abfrage zu stellen und jq, um die JSON-Abfrage zu parsen.

Lass uns zum Beispiel das Datenobjekt Richard Feynman (Q39246) in Wikidata nachschlagen und die englische Bezeichnung abfragen:

$ URL='https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q39246&format=json'
$ curl -s $URL | jq '.entities[].labels.en.value'
"Richard Feynman"

$ curl -s $URL | jq '.entities[].claims|length'
55

Wir finden heraus, dass Q39246 der Wikidata-Identifikator fĂŒr das Datenobjekt mit der englischen Bezeichnung "Richard Feynman" ist und dass es 55 Aussagen ĂŒber ihn gibt.

JavaScript

Um einen MediaWiki-API-Client in JavaScript zu schreiben, wird nur ein JSONP-Handler benötigt. Viele Bibliotheken (z.B. jQuery) umfassen JSONP-Clients oder es kann ein unabhÀngiger geschrieben werden.

Im MediaWiki-Ökosystem kann jQuery direkt genutzt werden:

$.ajax({
  url: '//www.wikidata.org/w/api.php',
  data: { action: 'wbgetentities', ids: mw.config.get('wgWikibaseItemId'), format: 'json' },
  dataType: 'jsonp',
  success: function (x) {
    console.log('wb label', x.entities.Q39246.labels.en.value);
    console.log('wb description', x.entities.Q39246.descriptions.en.value);
  }
});

Dies nutzt $.ajax() von jQuery, der in vielen interaktiven JavaScript-Code-Umgebungen verfĂŒgbar ist und Sinn macht, wenn dein Ziel ein eigenstĂ€ndiges Projekt ist.

Wenn dein Ziel ist, Code in einem Wiki auszufĂŒhren, z.B. als Gadget, solltest du die höherstufige Funktion mw.api() nutzen, die vom 'mediawiki.api'-ResourceLoader-Modul angeboten wird.

In anderen Umgebungen kann ein einfacher JSONP-Handler geschrieben werden:

var mw;
(function (mw) {

  /**
   * Query a MediaWiki api.php instance with the given options
   */
  function mwQuery(endpoint, options) {

    /**
     * Create a uniquely-named callback that will process the JSONP results
     */
    var createCallback = function (k) {
      var i = 1;
      var callbackName;
      do {
        callbackName = 'callback' + i;
        i = i + 1;
      } while (window[callbackName])
      window[callbackName] = k;
      return callbackName;
    }

    /**
     * Flatten an object into a URL query string.
     * For example: { foo: 'bar', baz: 42 } becomes 'foo=bar&baz=42'
     */
    var queryStr = function (options) {
      var query = [];
      for (var i in options) {
        if (options.hasOwnProperty(i)) {
          query.push(encodeURIComponent(i) + '=' + encodeURIComponent(options[i]));
        }
      }
      return query.join('&');
    }

    /**
     * Build a function that can be applied to a callback.  The callback processes
     * the JSON results of the API call.
     */
    return function (k) {
      options.format = 'json';
      options.callback = createCallback(k);
      var script = document.createElement('script');
      script.src = endpoint + '?' + queryStr(options);
      var head = document.getElementsByTagName('head')[0];
      head.appendChild(script);
    };

  }

  mw.api = {
    query: mwQuery,
  };

})(mw || (mw = {}));

CirrusSearch

CirrusSearch ist eine MediaWiki-Erweiterung, um die Elastic-basierte Suche des MediaWiki-Inhalts zu aktivieren. Sie fungiert als Such-Backend, wobei action=query&list=search die Haupt-OberflĂ€che hierfĂŒr ist.

Du kannst die gleichen Cirrus-Funktionen in API-Abfragen nutzen, die Benutzer in die Such-Box eingeben können. Zum Beispiel kannst du das Spezial-PrÀfix morelike: nutzen, um verwandte Seiten zu finden.

Suche nach Seiten mit Bezug zu Marie Curie und Radium.

ZusÀtzliche CirrusSearch-API-Module

ZusĂ€tzlich kann CirrusSearch seine Konfiguration und interne Informationen ausgeben. Diese APIs sind wahrscheinlich nur nĂŒtzlich, wenn du dich mit Elasticsearch auskennst und sehen möchtest, wie CirrusSearch sie nutzt. Sie sind alle interne APIs zur Fehlersuche und es gibt keine Garantien hinsichtlich ihrer RĂŒckwĂ€rts-KompatibilitĂ€t von Änderungen ihrer Ausgabe.

Seitenparameter ?action=cirrusdump
Zum Beispiel https://en.wikipedia.org/wiki/2014?action=cirrusdump
?cirrusDumpQuery-Parameter fĂŒr Special:Search-Abfragen
Dies ist ein Action-Parameter fĂŒr index.php, zum Beispiel https://en.wikipedia.org/wiki/Special:Search/cat%20dog%20chicken?cirrusDumpQuery
?cirrusDumpResult-Parameter fĂŒr Special:Search-Abfragen
Dies ist ein Action-Parameter fĂŒr index.php, zum Beispiel https://en.wikipedia.org/wiki/Special:Search/cat%20dog%20chicken?cirrusDumpResult
Ein zusĂ€tzlicher Parameter cirrusExplain kann mit cirrusDumpResult ĂŒbergeben werden, um die Lucene-ErklĂ€rung des Ergebnisses zu erhalten, das im Ergebnis-Dump enthalten ist. Zum Beispiel https://en.wikipedia.org/wiki/Special:Search/cat%20dog%20chicken?cirrusDumpResult&cirrusExplain
API-Module cirrus-config-dump, cirrus-settings-dump, cirrus-mapping-dump
Diese geben das CirrusSearch-Setup aus.
Hier ist eine Beispiel-Abfrage

Wikidata

Die Wikidata-API enthĂ€lt einige Funktionen (wbgetentities, wbgetclaims, wbsearchentities), die genutzt werden können, um nach Informationen ĂŒber Datenobjekte, Eigenschaften und Aussagen zu suchen.

Wikidata-Abfragedienst

Wikidata Query Service fĂŒhrt graph-basierte Suchen in Wikidata ĂŒber eine SPARQL-API aus. Er ist verfĂŒgbar auf https://query.wikidata.org/

Der WDQS-Explorer (Demo) (Quellcode) bietet Graph im Browser an, indem SPARQL-Abfragen an den Wikidata-Abfragedienst gestellt werden.

Interaktive Beispiele

Wikipedia

Gehe auf https://en.wikipedia.org/wiki/Main_Page, öffne die JavaScript-Konsole und fĂŒhre folgendes aus:

$.ajax({
  url: '//en.wikipedia.org/w/api.php',
  data: {
    action: 'query',
    list: 'search',
    srsearch: 'Richard Feynman',
    format: 'json',
    formatversion: 2
  },
  dataType: 'jsonp',
  success: function (x) {
    console.log('title', x.query.search[0].title);
  }
});

Dadurch wird die Zeichenkette Richard Feynman in der JavaScript-Konsole protokolliert.

Wenn die MediaWiki-Bibliotheken und -Umgebung nicht verfĂŒgbar sind, kann dies durch Nutzung der Funktion wmQuery() von oben erfolgen:

var queryWikipedia = mw.api.query('//en.wikipedia.org/w/api.php',
  { action: 'query', list: 'search', srsearch: 'Richard Feynman' });

queryWikipedia(function (x) {
  console.log('title', x.query.search[0].title);
});

Wikidata

Durch Nutzung von JSONP können wir die Schritte direkt von der JavaScript-Konsole des Browsers aus ausfĂŒhren. In Wikipedia ist der Wikidata-Datenobjekt-Identifikator ĂŒber den MediaWiki-Konfigurationswert wgWikibaseItemId verfĂŒgbar.

Gehe auf https://en.wikipedia.org/wiki/Richard_Feynman, öffne die JavaScript-Konsole und fĂŒhre folgendes aus:

$.ajax({
  url: '//www.wikidata.org/w/api.php',
  data: { action: 'wbgetentities', ids: mw.config.get('wgWikibaseItemId'), format: 'json' },
  dataType: 'jsonp',
  success: function (x) {
    console.log('wb label', x.entities.Q39246.labels.en.value);
    console.log('wb description', x.entities.Q39246.descriptions.en.value);
  }
});

Dadurch wird die Zeichenkette Richard Feynman und die Zeichenkette der Beschreibung des Wikidata-Eintrags "American quantum physicist" in der JavaScript-Konsole protokolliert.

Wenn die MediaWiki-Bibliotheken und -Umgebung nicht verfĂŒgbar sind, kann dies durch Nutzung der Funktion wmQuery() von oben erfolgen:

var queryWikidata = mw.api.query('//www.wikidata.org/w/api.php',
  { action: 'wbgetentities', ids: 'Q39246' }); 

queryWikidata(function (x) {
  console.log('wb label', x.entities.Q39246.labels.en.value);
  console.log('wb description', x.entities.Q39246.descriptions.en.value);
});

Wiktionary

Gehe auf https://en.wikipedia.org/wiki/Main_Page, öffne die JavaScript-Konsole und fĂŒhre folgendes aus:

$.ajax({
  url: '//en.wiktionary.org/w/api.php',
  data: { action: 'query', prop: 'revisions', rvprop: 'content', titles: 'Richard Feynman', format: 'json' },
  dataType: 'jsonp',
  success: function (x) {
    console.log('wiktionary title', x.query.pages['-1'].title);
  }
});

Dadurch wird die Zeichenkette Richard Feynman in der JavaScript-Konsole protokolliert.

Wenn die MediaWiki-Bibliotheken und -Umgebung nicht verfĂŒgbar sind, kann dies durch Nutzung der Funktion wmQuery() von oben erfolgen:

var queryWiktionary = mw.api.query('//en.wiktionary.org/w/api.php',
  { action: 'query', prop: 'revisions', rvprop: 'content', titles: 'Richard Feynman' });

queryWiktionary(function (x) {
  console.log('wiktionary title', x.query.pages['-1'].title);
});