2017-04-18 20 views
0

fscrawler 2.3-SNAPSHOTを使用して "/ tmp/es"フォルダにあるドキュメントを索引付けしました。fscrawlerを使ったElasticSearchファイルマッピングとC#のNESTによるドキュメント検索

コード...

{ 
    "properties" : { 
    "attachment" : { 
     "type" : "binary", 
     "doc_values": false 
    }, 
    "attributes" : { 
     "properties" : { 
     "group" : { 
      "type" : "keyword" 
     }, 
     "owner" : { 
      "type" : "keyword" 
     } 
     } 
    }, 
    "content" : { 
     "type" : "text" 
    }, 
    "file" : { 
     "properties" : { 
     "content_type" : { 
      "type" : "keyword" 
     }, 
     "filename" : { 
      "type" : "keyword" 
     }, 
     "extension" : { 
      "type" : "keyword" 
     }, 
     "filesize" : { 
      "type" : "long" 
     }, 
     "indexed_chars" : { 
      "type" : "long" 
     }, 
     "indexing_date" : { 
      "type" : "date", 
      "format" : "dateOptionalTime" 
     }, 
     "last_modified" : { 
      "type" : "date", 
      "format" : "dateOptionalTime" 
     }, 
     "checksum": { 
      "type": "keyword" 
     }, 
     "url" : { 
      "type" : "keyword", 
      "index" : true 
     } 
     } 
    }, 
    "object" : { 
     "type" : "object" 
    }, 
    "meta" : { 
     "properties" : { 
     "author" : { 
      "type" : "text" 
     }, 
     "date" : { 
      "type" : "date", 
      "format" : "dateOptionalTime" 
     }, 
     "keywords" : { 
      "type" : "text" 
     }, 
     "title" : { 
      "type" : "text" 
     }, 
     "language" : { 
      "type" : "keyword" 
     } 
     } 
    }, 
    "path" : { 
     "properties" : { 
     "encoded" : { 
      "type" : "keyword" 
     }, 
     "real" : { 
      "type" : "keyword", 
      "fields": { 
      "tree": { 
       "type" : "text", 
       "analyzer": "fscrawler_path", 
       "fielddata": true 
      } 
      } 
     }, 
     "root" : { 
      "type" : "keyword" 
     }, 
     "virtual" : { 
      "type" : "keyword", 
      "fields": { 
      "tree": { 
       "type" : "text", 
       "analyzer": "fscrawler_path", 
       "fielddata": true 
      } 
      } 
     } 
     } 
    } 
    } 
} 

今、私は私のC#アプリケーションでNESTを使用してそれらを検索したい、私はhit.source.contentによってコンテンツを得ることができたが、hit.source.filenameでファイル名を取得することはできません:それは、それらをマッピングし:私はhit.Source.urlhit.Source.filenameで行をコメントするとき

var response = elasticClient.Search<documents>(s => s 
       .Index("tanks") 
       .Type("doc") 
       .Query(q => q.QueryString(qs => qs.Query(query)))); 

      if (rtxSearchResult.Text != " ") 
      { 
       rtxSearchResult.Text = " "; 

       foreach (var hit in response.Hits) 
       { 


        rtxSearchResult.Text = rtxSearchResult.Text + ("Name: " + hit.Source.fileName.ToString() 
        + Environment.NewLine 
        + "Content: " + hit.Source.content.ToString() 
        + Environment.NewLine 
        + "URL: " + hit.Source.url.ToString() 
        + Environment.NewLine 
        + Environment.NewLine); 
       } 
      } 

は、上記NULLExceptionが、実行をスローします。

木場はファイル名フィールドをfile.filename、URLをfile.url、内容をcontentと表示しています。

ファイル名が助けてください、今日のカップルのためにここで立ち往生...私はそれを取得することができません、ファイルの下にネストされたよう..

+0

あなたのタイプ 'ドキュメント 'はどのように見えますか?それを見せてもらえますか? –

答えて

0

間違いを発見されました:

マイドキュメントクラスだった:

Class documents 
{ 
     Public string filename { get; set; } 

     Public string content { get; set; } 

     Public string url { get; set; } 
} 

ファイル名とURLがfile.filenamefile.urlであるため、filenameとurlを持つ別のクラスファイルが必要でした。

Class documents 
{ 
     Public File file { get; set; } 

     Public string content { get; set; } 

} 

Class File 
{ 
      Public string filename { get; set; } 

      Public string url { get; set; } 
} 

ので、私はhit.Source.file.filenamehit.Source.file.urlでそれらにアクセスすることができました。

関連する問題