概要
検索結果のjsonには含まれているのに、elasticsearch-nestでアクセスした場合、AttachmentのTitleに値が格納されていない。
取得するのに必要な設定があれば教えてほしい。
試した環境
- ElasticSearch 5.0.1 (公式のDockerイメージを利用)
- .NETCore 1.1
- NEST 5.0.0 RC4
再現用情報
ElasticSearchに入れたデータと手順
DELETE documents
POST documents/document/1
{
"id" : 1,
"path": "/a/b/c/d/",
"attachment":{
"author": "作者",
"content": "I have a pen. I have an apple",
"content_length": 12345,
"content_type": "plain/txt",
"date" : "2016-12-06T12:34:56Z",
"language": "ja",
"name": "名前",
"title": "タイトル",
"keywords": "キーワード",
"indexed_chars": 12345,
"detect_language" : "ja"
}
}
検索クライアント側
Documentクラスは、以下のブログを参考にした。Futureのところ。
マッピングの設定をしなくても再現しているため、上のデータ投入手順では省きました。
public class Document
{
public int Id { get; set; }
public string Path { get; set; }
public string Content { get; set; }
public Attachment Attachment { get; set; }
}
そして、検索してDocumentを取得する
var connectionSettings = new ConnectionSettings(
new Uri("http://xxx.xxx.xxx.xxx:9200"))
.DisableDirectStreaming();
var client = new ElasticClient(connectionSettings);
var response = client .Get<Document>(1, idx => idx.Index("documents"));
Console.WriteLine(response.DebugInformation);
var document = response.Source;
標準出力に検索結果として取得されたJSONが以下のように表示され、Titleも取得できていますが、
documentの中のAttachmentのTitleはNullのになっています。
# Response:
{"_index":"documents","_type":"document","_id":"1","_version":1,"found":true,"_source":{
"id" : 1,
"path": "/a/b/c/d/",
"attachment":{
"author": "作者",
"content": "I have a pen. I have an apple",
"content_length": 12345,
"content_type": "plain/txt",
"date" : "2016-12-06T12:34:56Z",
"language": "ja",
"name": "名前",
"title": "タイトル",
"keywords": "キーワード",
"indexed_chars": 12345,
"detect_language" : "ja"
}
}
}
検索結果として取得したマッピングされたDocumentオブジェクトの中身を見たとき、Title [string] : null となっています。
IMHO
Githubのレポジトリで、
取得したJSONからAttachmentを生成しているところがありますが、ここのswitch case文でtitleを判定していないので、
何も入らないのでは? と感じた次第です。