ELaticSearch——PlainElastic.net.dll 中的JsonNetSerializer

之前为了尽量减少对ES类库的使用,对于ES查询返回的结果,直接使用NewtonJson的json转化器,

结果最后发现搜索结果的Json中有聚合的结果,但是转化成SearchResult<object> 就怎么也看不到FacetResult部分。


因此,寻寻觅觅终于找到原因所在,不过令人头疼的是PlainElastic.net.dll 最新的将facet标注为过期,

  [Obsolete("Facets are deprecated and will be removed in a future release. You are encouraged to migrate to aggregations instead.")]
    public class Facets<T> : QueryBase<Facets<T>>
    {}

但是在SearchResult中还是使用的facet 而不是Aggeragation。这个当前的做法其实是存在风险的,万一彻底去掉了,就需要修改代码部分的实现。

  public class SearchResult<T> : BaseResult
    {
        public int took;
        public bool timed_out;
        public ShardsResult _shards;
        public SearchHits hits;
        public SearchFacets <span style="color:#ff0000;">facets;</span>
        public string _scroll_id;

        public IEnumerable<T> Documents
        {
            get { return hits.hits.Select(hit => hit._source); }
        }
}


 PlainElastic.net.dll 中的json转化器做了特殊的处理,其实使用的也是NewtonJson,只不过添加了几个特殊的转化器。

代码如下:

  public class JsonNetSerializer: IJsonSerializer
    {
        public JsonSerializerSettings Settings { get; set; }


        public JsonNetSerializer()
        {
            Settings = new JsonSerializerSettings();
            Settings.Converters.Add(new IsoDateTimeConverter());
            Settings.Converters.Add(new FacetCreationConverter());
            Settings.NullValueHandling = NullValueHandling.Ignore;
        }


        public string Serialize(object o)
        {
            return JsonConvert.SerializeObject(o, Formatting.None, Settings);
        }

        public object Deserialize(string value, Type type)
        {
            return JsonConvert.DeserializeObject(value, type, Settings);
        }
    }

总而言之,还是用他自己的吧,就不费劲写自己的转化器了 。

另外发现ES还做了异步查询,看来还得重构代码



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值