2016-06-14 55 views
5

我对Elasticsearch很新颖,想知道如何使用NEST C#将以下json文档的索引和索引创建为Elasticsearch?使用Elasticsearch NEST的索引Json文档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 –

回答

5

要创建具有NEST索引很简单,只要

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

这将创建与节点定义碎片和副本的默认数量的指标。

索引表示为JSON入索引的文档将

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); 

这里我们使用低等级客户机索引JSON,可在NEST通过.LowLevel财产上ElasticClient

要搜索索引文件将

// 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") 
     ) 
    ) 
); 

这将返回索引的文档。这里使用的Search<T>()中使用的泛型类型参数dynamic表示生成的文档将被反序列化为Json.Net JObject类型。

当我们创建索引时,我们没有为我们的类型type-name指定映射,因此Elasticsearch从json文档的结构推断出映射。 This is dynamic mapping,并且可以用于许多情况,但是,如果您知道要发送的文档的结构并且不会被破坏性更改,那么您可以使用specify a mapping for the type。在这个特定的例子中这样做的好处是chapter数组将被推断为object type映射,但是如果您想跨个别章节的章节名称和章节描述进行搜索,那么您可能想要将chapter映射为nested type