Elasticsearch .net 客户端条件拼接查询
private Func<SearchDescriptor<BaseTest>, ISearchRequest> ConstructWhere(TestCondition where)
{
Func<SearchDescriptor<BaseTest>, ISearchRequest> result;
List<Func<QueryContainerDescriptor<BaseTest>, QueryContainer>> querys = new List<Func<QueryContainerDescriptor<BaseTest>, QueryContainer>>(); if (where.EduLevel > )
{
querys.Add(o => o.Term(f => f.EduLevel, where.EduLevel));
} if (where.Subject > )
{
querys.Add(o => o.Term(f => f.Subject, where.Subject));
}
if (where.TestLevel > )
{
querys.Add(o => o.Term(f => f.DifficultyLevel, where.TestLevel));
}
if (where.TestType > )
{
querys.Add(o => o.Term(f => f.ExternalType, where.TestType));
}
if (where.Kdgs != null && where.Kdgs.Count > )
{
querys.Add(o => o.Bool(b => b.Should(s => s.Terms(ts => ts.Field(f => f.KnowledgePoints).Terms(where.Kdgs)))));
}
if (where.Chps != null && where.Chps.Count > )
{
querys.Add(o => o.Bool(b => b.Should(s => s.Terms(ts => ts.Field(f => f.Chapters.First().ChapterId).Terms(where.Chps)))));
}
if (where.Year > )
{
querys.Add(o => o.Term(f => f.Year, where.Year));
}
if (!where.SearchStr.IsNullOrEmpty())
{
querys.Add(o => o.Match(m => m.Field(f => f.TextTitle).Query(where.SearchStr)));
}
Func<QueryContainerDescriptor<BaseTest>, QueryContainer> condition =
o => o.Bool(b => b.Must(
querys.ToArray()
));
if (where.SearchStr.IsNullOrEmpty() && !where.order.IsNullOrEmpty())
{
if (where.IsDesc)
{
result =
o => o.Type(_typeName).Query(condition)
.From(where.PageIndex).Size(where.PageSize).Sort(s => s.Descending(where.order));
}
else
{
result =
o => o.Type(_typeName).Query(condition)
.From(where.PageIndex).Size(where.PageSize).Sort(s => s.Ascending(where.order));
}
}
else if(!where.SearchStr.IsNullOrEmpty())
{
result =
o => o.Type(_typeName).Query(condition)
.From(where.PageIndex).Size(where.PageSize);
}
else
{
result =
o => o.Type(_typeName).Query(condition)
.From(where.PageIndex).Size(where.PageSize);
} result += o => o.Source(sc => sc.Include(ic => ic
.Fields(
fd => fd.Oid,
fd => fd.TId,
fd => fd.ExternalTypeName,
fd => fd.ExternalType,
fd => fd.DataVersion,
fd => fd.Year,
fd => fd.DifficultyLevel,
fd => fd.Subject,
fd => fd.EduLevel,
fd => fd.HtmlTitle,
fd => fd.BuildPaperCount,
fd => fd.TrainCount,
fd => fd.CorrectCount,
fd => fd.ModifyDateTime,
fd => fd.LastReferenceTitle,
fd => fd.LastReferencePaperId,
fd => fd.ReferenceCount
)));
return result;
}
Elasticsearch .net 客户端条件拼接查询的更多相关文章
- SpringDataJPA+QueryDSL玩转态动条件/投影查询
在本文之前,本应当专门有一篇博客讲解SpringDataJPA使用自带的Specification+JpaSpecificationExecutor去说明如何玩条件查询,但是看到新奇.编码更简单易懂的 ...
- mybatis 使用记录(二) 动态拼接查询条件
2016-12-16 阅读项目代码时,在项目的xml文件中发现如下写法: SELECT student_user_id FROM tbr_student_class WHERE 1=1 <if ...
- Oracle,Mysql ,SQL Server 三大数据库带参数的模糊查询, 拼接查询条件问题
最近项目开发一直在不断切换数据库,有时候一条sql 要同时考虑多种数据库中的兼容问题 , 先总结一条模糊查询拼接查询条件的问题,后续追加总结. 目前使用 mybatis: 1. Oracle 中使 ...
- 查询拼接SQL语句,多条件模糊查询
多条件查询,使用StringBuilder拼接SQL语句,效果如下: 当点击按钮时代码如下: private void button1_Click(object sender, EventArgs e ...
- ASPNETCOREAPI 跨域处理 SQL 语句拼接 多条件分页查询 ASPNET CORE 核心 通过依赖注入(注入服务)
ASPNETCOREAPI 跨域处理 AspNetCoreApi 跨域处理 如果咱们有处理过MV5 跨域问题这个问题也不大. (1)为什么会出现跨域问题: 浏览器安全限制了前端脚本跨站点的访问资源, ...
- elasticsearch组合多条件查询实现restful api以及java代码实现
原文:http://blog.java1234.com/blog/articles/372.html elasticsearch组合多条件查询实现restful api以及java代码实现 实际开发中 ...
- Asp.net Core C#进行筛选、过滤、使用PredicateBuilder进行动态拼接lamdba表达式树并用作条件精准查询,模糊查询
在asp.net core.asp.net 中做where条件过滤筛选的时候写的长而繁琐不利于维护,用PredicateBuilder进行筛选.过滤.LInq配合Ef.core进行动态拼接lamdba ...
- ElasticSearch(七):Java操作elasticsearch基于smartcn中文分词查询
package com.gxy.ESChap01; import java.net.InetAddress; import org.elasticsearch.action.search.Search ...
- Python Elasticsearch批量操作客户端
基于Python实现的Elasticsearch批量操作客户端 by:授客 QQ:1033553122 1. 代码用途 1 2. 测试环境 1 3. 使用方法 1 3.1 配置ES服务器信息 1 ...
随机推荐
- Struts2框架搭建
使用Struts2版本为:struts-2.3.16.3 下载地址:http://struts.apache.org/ 一.向web项目中添加struts2依赖库 commons-fileupload ...
- Jquery轻量级幻灯插件-OWL Carousel--支持触屏的移动浏览器
Jquery轻量级幻灯插件-OWL Carousel--支持触屏的移动浏览器 在项目中,需要做一个幻灯功能,领导说需要一个小清醒的啊,轻量级的.刚开始搜索到这个: CRAFTYSLIDE插件.但是用起 ...
- - 高级篇:二,IL设置静态属性,字段和类型转换
- 高级篇:二,IL设置静态属性,字段和类型转换 静态属性赋值 先来看 Reflector反射出的IL源码(感谢Moen的提示),这次用 Release模式编译,去掉那些无用的辅助指令 public ...
- FileTable初体验
FileTable初体验 阅读导航 启用FILESTREAM设置 更改FILESTRAM设置 启用数据库非事务性访问级别 FileTable 在我接触FileTable之前,存储文件都是存储文件的链接 ...
- android 弹出带输入框的对话框
private void inputTitleDialog() { final EditText inputServer = new EditText(this); inputServ ...
- VS2012下基于Glut 矩阵变换示例程序2:
在VS2012下基于Glut 矩阵变换示例程序:中我们在绘制甜圈或者圆柱时使用矩阵对相应的坐标进行变换后自己绘制甜圈或者圆柱.我们也可以使用glLoadMatrixf.glLoadMatrixd载入变 ...
- <我的外骨骼,诺基>后的访谈
<我的外骨骼,诺基>后的访谈 在接下采访任务之前,我对杨贵福的了解仅仅限于:有名的科幻作家,男性,成年.我虽然读过他的许多作品,但在这些作品中并不能找到作者的影子.我试着从作品的行文风格中 ...
- .NET基础——循环、枚举
1. 循环结构 3种循环语句:while.do-while.for 面对循环我们应当注意: 1. 循环在做什么?(重复做的事情——也就是循环体的内容) 2. 循环的终止条件是什么?(循环条件) 3种循 ...
- Appium同时运行多个设备
为了提高测试效率,测试需要同时在多个android设备上运行,就需要启动多个appium. 启动appium时,为每个设备设置不同的端口号,并为driver设置该设备的udid.见如下实例,关键是红色 ...
- 各种Python小玩意收集
快速排序 quicksort = lambda lst: [] if not lst else quicksort([i for i in lst[1:] if i <= lst[0]]) + ...