2016-05-27 7 views
0

Ich versuche, ein multiField String Attribut ("prueba") für mehrsprachige Zwecke zu indizieren. Mein Mapping arbeitet mit Anmerkungenindex ein @MultiField spring-data-elasticsearch. Internationalisierungszwecke

@MultiField(
     mainField = @Field(type = FieldType.String, store = true), 
     otherFields = { 
       @NestedField(dotSuffix = "cat", type = FieldType.String, store = true, indexAnalyzer = "catalan", searchAnalyzer = "catalan"), 
       @NestedField(dotSuffix = "ba", type = FieldType.String, store = true, indexAnalyzer = "basque", searchAnalyzer = "basque"), 
       @NestedField(dotSuffix = "gal", type = FieldType.String, store = true, indexAnalyzer = "galician", searchAnalyzer = "galician"), 
       @NestedField(dotSuffix = "en", type = FieldType.String, store = true, indexAnalyzer = "english", searchAnalyzer = "english")} 
     ) 
protected String prueba; 

Das Ergebnis Mapping ist:

, 
      "prueba": { 
       "type": "string", 
       "store": true, 
       "fields": { 
       "prueba.ba": { 
        "type": "string", 
        "store": true, 
        "analyzer": "basque" 
       }, 
       "prueba.cat": { 
        "type": "string", 
        "store": true, 
        "analyzer": "catalan" 
       }, 
       "prueba.en": { 
        "type": "string", 
        "store": true, 
        "analyzer": "english" 
       }, 
       "prueba.gal": { 
        "type": "string", 
        "store": true, 
        "analyzer": "galician" 
       } 
       } 
      }, 

Also, ich meine Objekt-Index, aber das Ergebnis ist nur ... `

IndexQuery query = new IndexQuery(); 
query.setObject(itemTransparencia); 
query.setType(subportal); 

String id = this.elasticsearchOperations.index(query); 

GET /item_transparencia/432/_search 

{ 
    "took": 1, 
    "timed_out": false, 
    "_shards": { 
     "total": 5, 
     "successful": 5, 
     "failed": 0 
    }, 
    "hits": { 
     "total": 1, 
     "max_score": 1, 
     "hits": [ 
     { 
      "_index": "item_transparencia", 
      "_type": "432", 
      "_id": "AVTxEfvBhgYXtMQTaKx1", 
      "_score": 1, 
      "_source": { 
       "subportal": "432", 
       "titulo": null, 
       "prueba": "prueba la tarta de mi casa", 
       "subTitulo": null, 
       "descripcion": null, 
       "fechaIndexado": "2016-05- 

ich nur bekommen "prueba": "pueba la tarta de mi casa".

- Kann mir jemand helfen zu verstehen, wie kann ich die verschachtelten Felder aus dem Feld "prueba" indizieren oder abrufen? -Do indexAnalyzer = "katalanisch", searchAnalyzer = "katalanisch" mir helfen, automatisch auf eine andere Sprache zu indizieren?

Vielen Dank!

Antwort

0

Die Multi-Felder prueba.ba, prueba.cat, prueba.en wurden prueba.gal indiziert, aber Sie werden sie nicht in Ihrem Quelldokument sehen.

Sie können jetzt direkt auf Ihre Abfragen verweisen (der im Mapping deklarierte Analyzer wird wie erwartet verwendet) und Sie erhalten die erwarteten Ergebnisse. Die folgende Abfrage sollte beispielsweise das Dokument mit der ID AVTxEfvBhgYXtMQTaKx1 zurückgeben.

{ 
    "query": { 
     "match": { 
     "prueba.ba": "prueba" 
     } 
    } 
} 

jedoch nur beachten Sie, dass auf einem Feld eine Sprache Analysator Einstellung wird das Feld der Inhalt in das Analysegerät die Sprache nicht übersetzen, müssen Sie das selbst tun.

+0

Danke @Val. Das ist die richtige Antwort, aber wie kann ich meine 4 verschiedenen Wertsprachen in mein geschütztes String "prueba" Attribut einfügen? IndexQuery-Abfrage = neue IndexQuery(); query.setObject (ElementTransparencia); query.setType (Unterportal); Ist es der richtige Weg, es zu tun? weil in meinem Objekt itemTransparencia ein Set setPrueba hat und es sich um einen einzelnen String handelt. – mario1995

+0

Sie benötigen dafür ein [Objektfeld] (https://www.elastic.co/guide/en/elasticsearch/reference/current/object.html), da ein Multi-Feld nicht für das geeignet ist, was Sie danach. Dies kann die Form einer anderen Klasse mit 4 String-Feldern annehmen, auf die von Ihrem Objekt verwiesen wird. – Val

+0

Ok! Ich denke darüber nach! ;) Danke nochmal! – mario1995

Verwandte Themen