世界中心的专栏

一个督促自己学习的平台,明白山外有山,人外有人。微笑向阳

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还做了异步查询,看来还得重构代码



阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。for you! https://blog.csdn.net/Shiyaru1314/article/details/50131689
个人分类: Elasticsearch
所属专栏: ElasticSearch从0到1
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭