总体思路是:

利用json序列化的别名方法,反序列化到不同的字段上;

因为别名方法不支持多个别名,所以不得不根据不同的type,定义了多套适配内容。

最终在属性上进行选择。

本示例ElasticSearch返回的json串形如:

{

    "took": ,
"timed_out": false,
"_shards": {
"total": ,
"successful": ,
"failed":
},
"hits": {
"total": ,
"max_score": 3.4698925,
"hits": [
{
"_index": "user",
"_type": "userinfo",
"_id": "",
"_score": 3.4698925,
"_source": {
"uid": ,
"level":
}
}
,
{
"_index": "user",
"_type": "good",
"_id": "",
"_score": 0.06378032,
"_source": {
"id": ,
"name": "good luck"
}
}
]
} }
using PlainElastic.Net;
using PlainElastic.Net.Queries;
using PlainElastic.Net.Serialization;
using System;
using System.Collections.Generic;
using Newtonsoft.Json; namespace TestQuery
{
[Serializable]
public class Show
{
/* A实体反序列化内容 */
[JsonProperty(PropertyName = "uid")]
private string title_1;
[JsonProperty(PropertyName = "level")]
private string content_1; /* B实体反序列化内容 */
[JsonProperty(PropertyName = "id")]
private string title_2; [JsonProperty(PropertyName = "name")]
private string content_2; /* AB实体反序列化内容汇总返回 */
public string Title
{
get
{
return title_1 ?? title_2;
}
}
public string Content
{
get
{
return content_1 ?? content_2;
}
}
}
class Program
{
static void Main(string[] args)
{
var query = new QueryBuilder<Object>()
.Query(q =>
q.Bool(b =>
b.Should(m =>
m.Term(tm =>
{
tm.Field("uid");
tm.Value("");
return tm;
}).Custom(@"{
""exists"": {
""field"": ""name""
}
}")
)
)
)
.From()
.Size()
//.Sort(s => s.Field(UserInfoField.level, SortDirection.desc))
.BuildBeautified();
Console.WriteLine(query);
List<Show> list = new List<Show>();
var cmd = new SearchCommand("user");
var client = new ElasticConnection("localhost", );
var operationResult = client.Post(cmd, query);
var serializer = new JsonNetSerializer();
var hits = serializer.ToSearchResult<Show>(operationResult).hits;
var serializerResult = hits.hits;
//页面显示实体
//
foreach (var item in serializerResult)
{
list.Add(item._source);
} }
}
}

ElasticSearch返回不同的type的序列化的更多相关文章

  1. 在mvc返回JSON时出错:序列化类型为“System.Data.Entity.DynamicProxies.Photos....这个会的对象时检测到循环引用 的解决办法

    在MVC中返回JSON时出错,序列化类型为“System.Data.Entity.DynamicProxies.Photos....这个会的对象时检测到循环引用. public ActionResul ...

  2. es报错org.frameworkset.elasticsearch.ElasticSearchException: {"error":{"root_cause":[{"type":"cluster_block_exception","reason":"blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];"}],

    今天es在保存数据的时候报错 org.frameworkset.elasticsearch.ElasticSearchException: {"error":{"root ...

  3. Elasticsearch搜索类型(query type)详解

    关于我,邯郸人. 对这类话题感兴趣?欢迎发送邮件至donlianli@126.com 请支持原创http://www.cnblogs.com/donlianli/p/3857500.html    e ...

  4. ES 14 - (底层原理) Elasticsearch内部如何处理不同type的数据

    目录 1 type的作用 2 type的底层数据结构 3 探究type的存储结构 3.1 创建索引并配置映射 3.2 添加数据 3.3 查看存储结构 4 关于type的最佳实践 1 type的作用 在 ...

  5. elasticsearch 之 深入探秘type底层数据结构

    1.理论知识 type,是一个index中用来区分类似的数据的,类似的数据,但是可能有不同的fields,而且有不同的属性来控制索引建立.分词器.field的value,在底层的lucene中建立索引 ...

  6. ElasticSearch(十一)Elasticsearch清空指定Index/Type数据

    POST /index_name/type_name/_delete_by_query?conflicts=proceed { "query": { "match_all ...

  7. ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml)

    我们都知道在使用WebApi的时候Controller会自动将Action的返回值自动进行各种序列化处理(序列化为json,xml等),但是如果Controller的自动序列化后的结果不是我们想要的该 ...

  8. ASP.NET MVC WebApi 返回数据类型序列化控制(json)

    注:本文为个人学习摘录,原文地址:http://www.cnblogs.com/OpenCoder/p/4628557.html 我们都知道在使用WebApi的时候Controller会自动将Acti ...

  9. ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 用javascript在客户端删除某一个cookie键值对 input点击链接另一个页面,各种操作。 C# 往线程里传参数的方法总结 TCP/IP 协议 用C#+Selenium+ChromeDriver 生成我的咕咚跑步路线地图 (转)值得学习百度开源70+项目

    ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml)   我们都知道在使用WebApi的时候Controller会自动将Action的返回值自动进行各种序列化处理(序列化为 ...

随机推荐

  1. Angular2 架构

      1. 说明 Angular 2 是一个用 HTML 和 JavaScript (或者可以编译成JavaScript)来构建应用程序的框架.该框架包含了一系列的库. 在 Angular 里,我们这样 ...

  2. JdbcTemplate中queryForObject的EmptyResultDataAccessException问题

    在使用Spring提供的JdbcTemplate中名为queryForObject API进行数据库查询时有时会抛出如下异常提示息,org.springframework.dao.EmptyResul ...

  3. 理解JavaScript中的作用域和上下文

    JavaScript对于作用域(Scope)和上下文(Context)的实现是这门语言的一个非常独到的地方,部分归功于其独特的灵活性. 函数可以接收不同的的上下文和作用域.这些概念为JavaScrip ...

  4. MySQL通过增加用户实现远程连接数据库

    命令行进入mysql.exe所在目录 mysql -uroot -padmin 例子: grant all privileges on *.* to joe@localhost identified ...

  5. MAC OS terminal 快捷键记录

    Command + K 清屏 Command + T 新建标签 Command +W  关闭当前标签页 Command + S  保存终端输出 Command + D  垂直分隔当前标签页 Comma ...

  6. PHP文件上传相关

    1.必须通过POST提交 2. 声明 enctype="multipart/form-data"   $_FILES {[pic]=array ( [name]=>     ...

  7. js实现判断大写锁定是否开启(转)

    转载地址:http://www.cnblogs.com/xiaoao808/archive/2008/07/31/1257624.html 在用户登录输入密码时,常常会有因为大写锁定开启而造成输入密码 ...

  8. 算法系列:FFT 003

    转载自https://zhuanlan.zhihu.com/p/19763358 作者:Heinrich 链接:https://zhuanlan.zhihu.com/p/19763358 来源:知乎 ...

  9. vue

    vue.js 插件 setting--> plugins 搜索vue,下载安装如果想要高亮显示*.vue文件,可以在File Types 选项里找到HTML,然后在下方手动添加*.vue,这样就 ...

  10. Visual Studio 2015 前瞻 属性初始化赋值!

    通常我们建立属性的时候如果带初始化值的时候我们经常会这样处理. class MyClass { private string _name = "hello world!"; pub ...