Problem setting text field as "not_analyzed"

The keyword field datatype is what you are after here, which will index the string verbatim:

var response = client.CreateIndex("loandetails", l => l
	.Mappings(ms => ms
		.Map<LoanDetail>(m => m
			.Properties(ps => ps
				.Keyword(t => t
					.Name(pn => pn.Purpose)
				)
			)
		)
	)
);

String datatypes were split into keyword and text in 5,0. In Elasticsearch 5.2.0+ a normalizer was introduced that allows you to perform some normalization to indexed tokens e.g. lowercasing.