2014-05-14 8 views
7

Voglio realizzare ricerca a testo integrale e di ricerca con token con NEST, quindi voglio ottenere multicampo così:modo corretto di fare più campo con NEST

 "tweet": { 
     "properties": { 
      "message": { 
       "type": "string", 
       "store": true, 
       "fields": { 
       "raw": { 
        "type": "string", 
        "index": "not_analyzed" 
       } 
       } 
      } 
     } 
    } 

Attualmente, il mio mappatura con nido è

[ElasticType(Name = "tweet")] 
internal class Tweet 
{ 
    [ElasticProperty(Name = "message")] 
    public string Message { get; set; } 

ho cercato nella documentazione su NEST e ElasticSearch.net ma niente è venuto da.

C'è qualche possibilità di ottenere un campo cruda all'interno di un campo automaticamente o dovrei definire una classe annidata e specificare me il campo prima (io preferirei un modo più pulito)?

risposta

8

Checkout this answer.

In sostanza, si potrebbe fare qualcosa di simile:

client.CreatIndex("tweets", c => c 
    .AddMapping<Tweet>(m => m 
     .MapFromAttributes() 
     .Properties(props => props 
      .MultiField(mf => mf 
       .Name(t => t.Message) 
       .Fields(fs => fs 
        .String(s => s.Name(t => t.Message).Analyzer("standard")) 
        .String(s => s.Name(t => t.Message.Suffix("raw")).Index(FieldIndexOption.not_analyzed))))))); 
+0

Grazie per la risposta (e scusa per la mia risposta in ritardo). Funziona bene quando sto creando un indice del genere ma hai un'idea su come farlo con un client connesso e un indice già creato? ho definito una nuova proprietà chiamata Raw e ha aggiunto al mio mappatura base degli attributi. Sto iterando il tipo Tweet e controllando se c'è un attributo raw e poi voglio renderlo multi-field. – Folosse

+0

http://nest.azurewebsites.net/indices/put-mapping.html L'esempio TypeMapping sembra perfetto, ma non funziona più. Niente più riferimenti a TypeMapping – Folosse

+0

Quale versione di NEST stai usando? L'API è cambiata molto nella versione più recente e la documentazione deve essere aggiornata. Indipendentemente da ciò, si sta ancora andando ad avere bisogno di reindicizzare i dati con la nuova mappatura, quindi potrebbe essere la pena di ricreare l'indice pure. –