ElasticSearch返回不同的type的序列化
总体思路是:
利用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的序列化的更多相关文章
- 在mvc返回JSON时出错:序列化类型为“System.Data.Entity.DynamicProxies.Photos....这个会的对象时检测到循环引用 的解决办法
在MVC中返回JSON时出错,序列化类型为“System.Data.Entity.DynamicProxies.Photos....这个会的对象时检测到循环引用. public ActionResul ...
- 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 ...
- Elasticsearch搜索类型(query type)详解
关于我,邯郸人. 对这类话题感兴趣?欢迎发送邮件至donlianli@126.com 请支持原创http://www.cnblogs.com/donlianli/p/3857500.html e ...
- ES 14 - (底层原理) Elasticsearch内部如何处理不同type的数据
目录 1 type的作用 2 type的底层数据结构 3 探究type的存储结构 3.1 创建索引并配置映射 3.2 添加数据 3.3 查看存储结构 4 关于type的最佳实践 1 type的作用 在 ...
- elasticsearch 之 深入探秘type底层数据结构
1.理论知识 type,是一个index中用来区分类似的数据的,类似的数据,但是可能有不同的fields,而且有不同的属性来控制索引建立.分词器.field的value,在底层的lucene中建立索引 ...
- ElasticSearch(十一)Elasticsearch清空指定Index/Type数据
POST /index_name/type_name/_delete_by_query?conflicts=proceed { "query": { "match_all ...
- ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml)
我们都知道在使用WebApi的时候Controller会自动将Action的返回值自动进行各种序列化处理(序列化为json,xml等),但是如果Controller的自动序列化后的结果不是我们想要的该 ...
- ASP.NET MVC WebApi 返回数据类型序列化控制(json)
注:本文为个人学习摘录,原文地址:http://www.cnblogs.com/OpenCoder/p/4628557.html 我们都知道在使用WebApi的时候Controller会自动将Acti ...
- 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的返回值自动进行各种序列化处理(序列化为 ...
随机推荐
- ffmpeg-20160926[27]-bin.7z
ffplay 2016.09.26 开始使用 SDL 2.x , CPU 利用率比 SDL 1.x 略微好一些. ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 ...
- python之OS模块详解
python之OS模块详解 ^_^,步入第二个模块世界----->OS 常见函数列表 os.sep:取代操作系统特定的路径分隔符 os.name:指示你正在使用的工作平台.比如对于Windows ...
- iOS之initialize与load
initialize和load 这两个方法都是是什么时候调用的呢?都有着什么样的作用,下面看看吧! initialize +(void)initialize{ } 什么时候调用:当第一次使用这个类的时 ...
- NYOJ题目28大数阶乘
-------------------------------------祭出BigInteger AC代码: import java.math.BigInteger; import java.uti ...
- android init进程分析 ueventd
转自:http://blog.csdn.net/freshui/article/details/2132299 (懒人最近想起我还有csdn好久没打理了,这个Android init躺在我的草稿箱中快 ...
- 【leetcode】Perfect Squares (#279)
Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 1 ...
- XIV Open Cup named after E.V. Pankratiev. GP of SPb
A. Bracket Expression 直接按题意模拟即可. 时间复杂度$O(n)$. #include<stdio.h> #include<algorithm> #inc ...
- curl 小结
cURL可以使用URL的语法模拟浏览器来传输数据, 因为它是模拟浏览器,因此它同样支持多种协议,FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以 ...
- css position的使用
css position的使用 css 的 position 属性是用来设置元素的位置的,它还能设置一个元素出现在另一个元素的下层元素能用 top,bottom,left 和 right 属性设置位置 ...
- css中的四个不同的position设置
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...