package com.koolearn.framework.search.implement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.regex.Pattern;
import org.apache.commons.collections.CollectionUtils;
import org.apache.log4j.Logger;
import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsResponse;
import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.Requests;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.FilterBuilder;
import org.elasticsearch.index.query.FilterBuilders;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.RangeQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import com.koolearn.framework.common.utils.PropertiesConfigUtils;
import com.koolearn.framework.search.declare.Example;
import com.koolearn.framework.search.declare.ISearch;
public class SearchImp implements ISearch, InitializingBean, DisposableBean {
private Client searchClient = null;
private Logger logger = Logger.getLogger(SearchImp.class);
@Autowired
private String analyzerRegex = null;
@Autowired
private String wildcardRegex = null;
@Autowired
private List<String> clusterList = null;
@Autowired
private Boolean reCreateIndex = false;
@Autowired
private HashMap<String, ArrayList<String>> indexMap = null;
public void setIndexMap(HashMap<String, ArrayList<String>> indexMap) {
this.indexMap = indexMap;
}
public enum FieldType {
error, normal, date, wildcard;
}
private synchronized void close() {
if (this.searchClient == null) {
return;
}
this.searchClient.close();
}
/*
* 创建搜索客户端
* tcp连接搜索服务器
* 创建索引
* 创建mapping
* */
private synchronized boolean open() {
if (this.searchClient != null) {
return false;
}
try {
/*如果10秒没有连接上搜索服务器,即超时*/
Settings settings = ImmutableSettings.settingsBuilder()
.put("client.transport.ping_timeout", "10s")
.build();
/*创建搜索客户端*/
this.searchClient = new TransportClient(settings);
if (CollectionUtils.isEmpty(this.clusterList)) {
String cluster = PropertiesConfigUtils.getProperty("search.clusterList");
if (cluster != null) {
this.clusterList = Arrays.asList(cluster.split(","));
}
}
for (String item : this.clusterList) {
String address = item.split(":")[0];
int port = Integer.parseInt(item.split(":")[1]);
/*通过tcp连接搜索服务器*/
this.searchClient = ((TransportClient) this.searchClient)
.addTransportAddress(new InetSocketTransportAddress(address, port));
}
/*如果需要重新创建索引*/
if (this.reCreateIndex) {
Iterator<Entry<String, ArrayList<Str
相关推荐
Elasticsearch教程,Elasticsearch Java API创建Mapping,指定分词器
先说 Elasticsearch 版本,我的 Elasticsearch 版本是2.x ,具体是2.0.2 ,所以参照的时候,请先核对版本,在版本相差大的情况下,先可以试试。 为什么要指定分词器,因为我们在搜索(Search )的时候,创建索引(Index )的时候,都有规则,如果我们这个规则不同,那么我们就可以指定了。 场景: 当我一个索引库是存储生鲜蔬菜的,那词库应
Elasticsearch (ES)+Kibana简单使用
前言 es是一个强大的搜索引擎,目前知名公司内部都在使用! 因为Elasticsearch 是一个基于 Apache Lucene™ 的开源搜索引擎。无论在开源还是专有领域,Lucene 可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。 首先我们要知道,es虽然强大,但是不方便操作,所以我们需要借助于kibana工具来进行开发! kibana 本篇不讲kibana和es的安装,后面会专门写安装过程。这里先知道kibana工具是提供了一个可视化的界面。 我们的es需要以基于 HTTP 协议,以
微信中调起支付宝支付
微信中调用支付宝支付,首先我们知道微信是不能直接调用支付宝的,所以我们需要使用一个中间页提示用户在浏览器中打开,然后进行网页支付或打开app支付。以下为详细唤起支付宝的步骤、业务代码以及相关页面图。 如有问题欢迎评论留言,看到定回复哦^_^\(^o^)/~ 一、微信中唤起支付宝,有几个步骤: 1、中间页引导用户在浏览器中打开去唤起支付宝。 2、浏览器中打开支付宝或app中打开支付宝。 3...
【任何电机可使用的七段式s曲线-----包括matlab代码和simulink仿真】
S形加加速(T1)→>匀加速(T2)→减加速(T3)→>匀速(T4 )>加减速(T5)>匀减速(T6)-→>减减速(T7)
告别手动打点计时:用Lauterbach TRACE32的RunTime功能,5分钟搞定嵌入式代码段性能分析
本文深入解析了Lauterbach TRACE32的RunTime功能在嵌入式代码性能分析中的革命性应用。通过硬件级计时原理和非侵入式设计,该功能能快速精确测量代码执行时间,显著提升开发效率,特别适用于汽车电子和工业控制领域。文章还提供了从基础设置到高级分析的完整实战指南,帮助工程师轻松掌握这一强大工具。
Python爬虫实战:5分钟搞定政府网站公开数据抓取(附完整代码)
本文详细介绍了如何使用Python爬虫快速抓取政府网站公开数据,包括环境配置、网站结构分析、请求头构建、数据处理与存储等关键步骤。通过实战案例和完整代码,帮助开发者高效获取结构化数据,适用于数据分析、市场研究等场景。
Android Audio常见问题分析方法
分析audio dump,确定写给BT的data是否正常,MTK平台Android原生架构分析threadloop write节点,高通平台分析QXDM 1586节点,从dump确定问题大概位置。分析systrace 确定性能。AudioFocus状态(用于播放或者音量异常的情况)。AudioTrack是否正常创建bt连接是否正常通路异常,setMode,setSpeakerphoneOn等都会影响设备选择,sco调用流程是否正常。
智能制造之物料详解
制造业业务系统中的物料流转贯穿需求、采购、生产到交付全流程,各系统协同实现精准追踪。需求阶段由CRM/ERP/PLM生成物料计划;采购入库阶段SCM/WMS/QMS完成采购质检;生产阶段MES/APS协调领料加工;成品交付阶段WMS/SCM处理出库物流。整个流程以BOM为蓝图,ERP为调度中心,通过数据联动实现物料状态、位置和数量的全链路可追溯。
【数据集处理】中国地面气候资料日值数据集(V3.0)(含MATLAB全代码)
简介数据集数据处理
Android16 RK3576 Bluetooth source和sink模式切换
摘要:本文介绍了在RK3576平台上实现蓝牙A2DP模式动态切换的修改方案。通过在device配置文件中添加A2DP Sink相关属性,修改Bluetooth模块代码实现:1)在Config.java中增加persist.bluetooth.rka2dpsink属性控制模式切换;2)修改A2dpSinkStreamHandler.java取消音频焦点限制;3)调整btif_a2dp_sink.cc默认授予音频焦点。最终通过设置persist.bluetooth.rka2dpsink属性为true/false
win10 跳过U8环境检测的IE WebControls.rar
win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片
基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
大中型超市收银系统(可直接运行)
光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开
蓝牙模块HM-10手册
蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。
8608



被折叠的 条评论
为什么被折叠?



