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 ...
随机推荐
- ARC forbids explicit message send of 'autorelease'错误
(ARC forbids explicit message send of 'autorelease'错误) 在ios中经常会遇到:ARC forbids explicit message send ...
- Redis系统学习 五、管理
在最后一章里,我们将集中谈论Redis运行中的一些管理方面内容.这是一个不完整的Redis管理指南,我们将会回答一些基本的问题,初接触Redis的新用户可能会很感兴趣. 配置(Configuratio ...
- Java用jdom.jar解析读取XML文件信息
jdom.jar下载地址1:http://www.jdom.org/downloads/ 下载地址2:http://www.java2s.com/Code/Jar/j/Downloadjdomjar. ...
- myeclipse 配置 resin-pro-4.0.34
热部署: 在 resin.xml 文件下 增加 <host id="" root-directory="."> <!-- webapps ca ...
- linux学习之linux的hostname修改详解《转》
linux的hostname是一个kernel变量,可以通过hostname命令来查看本机的hostname.也可以直接cat /proc/sys/kernel/hostname查看. #hostna ...
- python cookbook学习1
python cookbook学习笔记 第一章 文本(1) 1.1每次处理一个字符(即每次处理一个字符的方式处理字符串) print list('theString') #方法一,转列表 结果:['t ...
- (*p)++ 与 *p++ 与 ++*p 拨开一团迷雾
(*p)++ 与 *p++ 与 ++*p 拨开一团迷雾 环境:win7 IDE:DEV-C++ 编译器:GCC 1.先说++i和i++的基础 代码如下: ? 1 2 3 4 5 6 7 8 9 10 ...
- python supervisor demo deployment
I did a demo about how to deploy other python apps served by a 'supervisord' daemon processor on git ...
- [每日一题] OCP1z0-047 :2013-07-16 主键与唯一索引
主键包括非空和唯一约束,它会自动创建唯一索引(注:唯一约束也会自动创建唯一索引),测试如下: 1. 创建一个表products gyj@OCM> Create table products( 2 ...
- 设置代码ios 6添加日历事件No calendar has been set.错误
查了好多资料,发明还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧! 在iOS 6做日历事件添加时,来来回回报错,No calendar has been set ...