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 客户端条件拼接查询的更多相关文章

  1. SpringDataJPA+QueryDSL玩转态动条件/投影查询

    在本文之前,本应当专门有一篇博客讲解SpringDataJPA使用自带的Specification+JpaSpecificationExecutor去说明如何玩条件查询,但是看到新奇.编码更简单易懂的 ...

  2. mybatis 使用记录(二) 动态拼接查询条件

    2016-12-16 阅读项目代码时,在项目的xml文件中发现如下写法: SELECT student_user_id FROM tbr_student_class WHERE 1=1 <if ...

  3. Oracle,Mysql ,SQL Server 三大数据库带参数的模糊查询, 拼接查询条件问题

    最近项目开发一直在不断切换数据库,有时候一条sql 要同时考虑多种数据库中的兼容问题 , 先总结一条模糊查询拼接查询条件的问题,后续追加总结. 目前使用   mybatis: 1. Oracle 中使 ...

  4. 查询拼接SQL语句,多条件模糊查询

    多条件查询,使用StringBuilder拼接SQL语句,效果如下: 当点击按钮时代码如下: private void button1_Click(object sender, EventArgs e ...

  5. ASPNETCOREAPI 跨域处理 SQL 语句拼接 多条件分页查询 ASPNET CORE 核心 通过依赖注入(注入服务)

    ASPNETCOREAPI 跨域处理 AspNetCoreApi 跨域处理 如果咱们有处理过MV5 跨域问题这个问题也不大. (1)为什么会出现跨域问题:  浏览器安全限制了前端脚本跨站点的访问资源, ...

  6. elasticsearch组合多条件查询实现restful api以及java代码实现

    原文:http://blog.java1234.com/blog/articles/372.html elasticsearch组合多条件查询实现restful api以及java代码实现 实际开发中 ...

  7. Asp.net Core C#进行筛选、过滤、使用PredicateBuilder进行动态拼接lamdba表达式树并用作条件精准查询,模糊查询

    在asp.net core.asp.net 中做where条件过滤筛选的时候写的长而繁琐不利于维护,用PredicateBuilder进行筛选.过滤.LInq配合Ef.core进行动态拼接lamdba ...

  8. ElasticSearch(七):Java操作elasticsearch基于smartcn中文分词查询

    package com.gxy.ESChap01; import java.net.InetAddress; import org.elasticsearch.action.search.Search ...

  9. Python Elasticsearch批量操作客户端

    基于Python实现的Elasticsearch批量操作客户端 by:授客 QQ:1033553122   1. 代码用途 1 2. 测试环境 1 3. 使用方法 1 3.1 配置ES服务器信息 1 ...

随机推荐

  1. 没有标准化字符串的后果(IOS)

    对于NSString肯定会经常用到,谈谈最近在项目中遇到的一个奇特的现象.如下:我们知道文件系统的命名都是用的字符串,比如你给文件取名“a.pdf”,然后保存文件后,那个文件的名字就真的是 " ...

  2. Clob类型转换成String类型

    oracle中表结构如下: create table GRID_RESOURCE ( ID VARCHAR2(50), CNNAME VARCHAR2(50), TYPE VARCHAR2(50), ...

  3. 安全验证之使用摘要认证(digest authentication)

    安全验证之使用摘要认证(digest authentication) 在前一篇文章中,主要讨论了使用HTTP基本认证的方法,因为HTTP基本认证的方式决定了它在安全性方面存在很大的问题,所以接下来看看 ...

  4. 下载centos6.4

    下载centos6.4 (原创)LAMP教程3-下载centos6.4 今天我要给大家讲的是安装CentOS-6.4-x86_64,是的没有错,就是64位的,因为我的机子是4G的内存,安装64位的ce ...

  5. [置顶] linux学习之samba安装问题详解

    一.首先查看是否安装samba,命令为:rpm -qa | grep samba 出现如下包表示已经安装,否则没有安装 samba-winbind-clients-3.5.10-125.el6.i68 ...

  6. 揭开Html 标签的面纱,忘不了的html .

     Html :(Hypertext MarkupLanguage),是用于描述网页文档的一种标记语言,是一种标准,它通过标记符号来标记要显示的网页中的各个部分.其本身是一种文本文件,通过在文本文件中添 ...

  7. 第 1 章 Node.js 介绍

    本章内容包括: 什么是 Node.js 框架,为什么要用 Node.js 框架,使用 Node.js 框架能够解决什么问题,在哪些场合下应该考虑使用 Node.js 框架. 如何下载 Node.js ...

  8. angularJs中自定义directive的数据交互

    首先放官方文档地址:https://docs.angularjs.org/guide/directive 就我对directive的粗浅理解,它一般用于独立Dom元素的封装,应用场合为控件重用和逻辑模 ...

  9. 【原】tinker dex文件格式的dump工具tinker-dex-dump

    序言 Tinker是微信推出的热更新开源项目,同其它热更新方案相比具有补丁包小,支持类,so,资源文件的替换等优点.其中在类替换的方案里自主研发了DexDiff算法,使得补丁包变的更小.DexDiff ...

  10. Js-Html 前端系列--页面撑开头尾

    今天学习过程中,发现一个超实用的方法,就是当页面有尾部,但是内容又不多的情况下,让中间的内容把尾部撑到底部. <script type="text/javascript"&g ...