2016-06-14 26 views
5

Elasticsearch için çok yeni ve bilmek istiyorum NEST C# kullanarak Elasticsearch için json belge aşağıdaki dizin ve dizin oluşturma nasıl? ANDAE ile bir dizin oluşturmak içinDizin Json Document kullanarak Elasticsearch NEST C#

{ 
    "BookName": "Book1", 
    "ISBN": "978-3-16-148410-0", 
    "chapter" : [ 
     { 
      "chapter_name": "Chapter1", 
      "chapter_desc": "Before getting into computer programming, let us first understand computer programs and what they..." 
     }, 
     { 
      "chapter_name": "Chapter2", 
      "chapter_desc": "Today computer programs are being used in almost every field, household, agriculture, medical, entertainment, defense.." 
     }, 
     { 
      "chapter_name": "Chapter3", 
      "chapter_desc": "MS Word, MS Excel, Adobe Photoshop, Internet Explorer, Chrome, etc., are..." 
     }, 
     { 
      "chapter_name": "Chapter4", 
      "chapter_desc": "Computer programs are being used to develop graphics and special effects in movie..." 
     } 
    ] 
} 
+0

https://github.com/elastic/elasticsearch-net/issues/336 –

cevap

5

Bu düğüm için tanımlanmış parçalarından ve kopyaları varsayılan numarası ile bir dizin yaratacak kadar basit

var client = new ElasticClient(); 
client.CreateIndex("index-name"); 

gibidir.

endeksi için endeks içine json olarak temsil belge

var json = @"{ 
    ""BookName"": ""Book1"", 
    ""ISBN"": ""978-3-16-148410-0"", 
    ""chapter"" : [ 
     { 
      ""chapter_name"": ""Chapter1"", 
      ""chapter_desc"": ""Before getting into computer programming, let us first understand computer programs and what they..."" 
     }, 
     { 
    ""chapter_name"": ""Chapter2"", 
      ""chapter_desc"": ""Today computer programs are being used in almost every field, household, agriculture, medical, entertainment, defense.."" 
     }, 
     { 
    ""chapter_name"": ""Chapter3"", 
      ""chapter_desc"": ""MS Word, MS Excel, Adobe Photoshop, Internet Explorer, Chrome, etc., are..."" 
     }, 
     { 
    ""chapter_name"": ""Chapter4"", 
      ""chapter_desc"": ""Computer programs are being used to develop graphics and special effects in movie..."" 
     } 
    ] 
}"; 

var indexResponse = client.LowLevel.Index<string>("index-name", "type-name", json); 

if (!indexResponse.Success) 
    Console.WriteLine(indexResponse.DebugInformation); 

Burada ElasticClient üzerinde .LowLevel özelliği üzerinden ANDAE mevcut endeks json düşük seviyeli istemcisi kullanıyorsanız olacaktır.

endeksli belge

// refresh the index so that newly indexed documents are available 
// for search without waiting for the refresh interval 
client.Refresh("index-name"); 

var searchResponse = client.Search<dynamic>(s => s 
    .Index("index-name") 
    .Type("type-name") 
    .Query(q => q 
     .Match(m => m 
      .Query("Photoshop") 
      .Field("chapter.chapter_desc") 
     ) 
    ) 
); 

Bu endeksli belgeyi döndürür olacağını arayın. Burada, Search<T>()'da kullanılan jenerik tip parametresi dynamic, sonuçta elde edilen belgelerin Json.Net JObject türlerine seri hale getirileceği anlamına gelir.

Dizini oluşturduğumuzda, türümüz için bir eşleme belirtmedik, type-name, bu yüzden Elasticsearch, eşlemeyi json belgesinin yapısından çıkardı. This is dynamic mapping ve birçok durum için yararlı olabilir, ancak göndereceğiniz belgelerin yapısını biliyorsanız ve yıkıcı olarak değişmeyecekse, o zaman specify a mapping for the type. Bu özel örnekte bunu yapmanın avantajı, chapter dizisinin bir object type eşlemesi olarak çıkarılacağıdır, ancak bir bölümün bölüm adı ve bölüm açıklamasında arama yapmak isterseniz, chapter adresini nested type olarak eşlemek isteyebilirsiniz. .