2016-07-26 6 views
0

Aktuelle Stapel beinhaltet node.js v0.12.7 läuft mit Elasticsearch-js> = 1.1.0 mit dem Elasticsearch 1.7 API.Elasticseach Abschluss suggester Rückkehr Vorschläge von spezifischen Indextyp

Meine aktuellen Elasticsearch Einstellungen abgebildet 1 Index mit 2 Typen haben:

elasticsearch.client.indices.create({ 
     index: 'randomindex', 
     body: { 
     "settings": { 
      "analysis": { 
      "filter": { 
       "autocomplete_filter": { 
       "type": "edge_ngram", 
       "min_gram": 1, 
       "max_gram": 20 
       } 
      }, 
      "analyzer": { 
       "autocomplete": { 
       "type": "custom", 
       "tokenizer": "standard", 
       "filter": [ 
        "lowercase", 
        "autocomplete_filter" 
       ] 
       }, 
       "my_english": { 
       "type":  "english", 
       "stopwords": "_english_" 
       } 
      } 
      } 
     }, 
     'mappings': { 
      'countries': { 
      'properties': { 
       'country': { 
       'type': 'string', 
       'fields': { 
        "autocomplete": { "type": "string", "index_analyzer": "autocomplete", "search_analyzer": "my_english" } 
       } 
       }, 
       "suggest_countries": { 
       "type": "completion", 
       "index_analyzer": "simple", 
       "search_analyzer": "simple", 
       "payloads": true 
       } 
      } 
      }, 
      'some_other_type': { 
      'properties': { 
       "field_1": { 
       "type": "date" 
       }, 
       "field_2": { 
       "type": "string" 
       }, 
       "suggest_some_other_field": { 
       "type": "completion", 
       "index_analyzer": "simple", 
       "search_analyzer": "simple", 
       "payloads": false 
       } 
      } 
      } 
     } 
     } 
    }); 

Ich habe dann beiden Vorschläge Felder ausgefüllt mit dem entsprechenden „Eingang“, „Ausgang“ und „Nutzlast“ ein.

Ich möchte einen bestimmten Index Typ angeben Vorschläge zurück aus, aber es ist Fehler zu werfen, wenn ich dies tun:

elasticsearch.clients.suggest({ 
    index: "randomindex", 
    type: "countries", 
    body: { 
     "suggest": { 
     text: query, 
     completion: { 
      "field": "suggest_countries" 
     } 
     } 
    } 
    }); 

Gibt es eine Möglichkeit, ich könnte in der auf einen bestimmten Typ angeben/verweisen. Methode vorschlagen?

+0

Bitte teilen Sie den Fehler ES wirft. – Val

+0

Es gibt keinen Fehler, wenn ich es auf Knoten ausführen. Es gibt nur ein leeres Optionsfeld im Antwortobjekt zurück. Wenn ich versuche, den Endpunkt "/ randomindex/countries/_suggest" über einen Client wie die Sense-Erweiterung von Google Chrome zu erreichen, übergebe ich etwas wie "{" suggest_countries ": {" text ":" a "," completion ": { "field": "suggest_countries"}}} 'und es wird ein Fehler ausgegeben wie' MapperParsingException [konnte nicht analysiert werden]; verschachtelt: ElasticsearchIllegalArgumentException [Unbekannter Feldname [Text], muss einer von [Ausgabe, Kontext, Eingabe, Gewicht, Nutzlast] sein;]. –

+0

Ich kann sicherstellen, dass ich das 'suggest_countries'-Feld korrekt im' autocomplete_countries'-Typ befüllt habe, weil ich Sense auf den Endpunkt '/ randomindex/countries/_search' überprüft habe und alles da zu sein scheint. –

Antwort

0

Sie müssen Ihren Anruf ohne type Parameter

elasticsearch.clients.suggest({ 
    index: "randomindex", 
    body: { 
     "suggest": { 
     text: query, 
     completion: { 
      "field": "suggest_countries" 
     } 
     } 
    } 
    }); 

finden Sie in der offiziellen Dokumentation der client.suggest() call machen, gibt es keine type Parameter zur Verfügung.

+0

etwas Glück dabei? – Val