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 协议,以
工业自动化中气动夹爪选型、调试与维护全流程实战解析
在工业自动化领域,气动执行元件是实现精准抓取与搬运的基础。其工作原理是通过压缩空气驱动气缸,转化为直线或旋转运动,从而控制夹爪的开合。这类技术因其结构简单、响应快速、成本低廉及维护方便,在自动化产线中具有极高的技术价值,是实现高效、可靠物料搬运的核心单元。其典型应用场景涵盖电子装配、汽车制造、食品包装等行业的上下料、分拣与定位工序。本文以工业自动化中常见的二指平行气动夹爪(常被工程师代号化为“Gripper-A”)为例,深入剖析其从硬件选型、气动系统集成到程序逻辑联锁的完整工程实践。内容聚焦于夹持力计算中惯
信息奥赛课课通(C++)p154-1近似排序
试题描述 读入一对正整数,将这两个数之间(包括这两个数本身)的所有数按下述特别规则排序后输出,该特别规则是按两数倒过来的值进行比较决定其大小,如30倒过来为3,29倒过来为92,则29大于30. 输入要求 1行,包含两个用空格隔开的自然数,这两个自然数给出了待排序数的范围,其中1≤第一个数≤第二个数≤999999999,两个数之差不超过100. 输出要求 输出排序后的数据,每行输出...
ESP-SR实战:从零搭建智能语音唤醒与命令识别系统
本文详细介绍了如何利用乐鑫ESP-SR框架,从零开始搭建一个完整的离线智能语音交互系统。内容涵盖硬件选型(推荐ESP32-S3与数字麦克风)、开发环境配置(ESP-IDF与ESP-ADF),并深入解析了AFE声学前端、WakeNet唤醒词检测和MultiNet命令词识别三大核心模块的工作原理与实战配置。通过具体的代码示例和调试技巧,指导开发者快速实现高识别率的语音唤醒与命令控制功能。
(ZOS-API)Matlab控制ZEMAX软件调整光学系统某镜面位姿
所用软件的版本:MatlabR2022a, Zemax OpticStudio2024R1交互扩展功能,Zemax和可以同时打开,操作会比较方便在ZEMAX软件中,调整次镜位置通常有两种方法:1.在次镜前后各添加一个坐标间断面,并修改其“偏心X”“偏心Y”等参数来调整次镜的位姿;2.或者直接在次镜属性选项中设置相关数值。这两种方法对Zernike系数的采集结果无显著影响。
基于Simulink的永磁同步电机三闭环(位置/速度/电流)控制仿真
本文详细介绍了基于Simulink的永磁同步电机三闭环控制系统设计与实现方法。系统采用位置环、速度环、电流环的三层嵌套结构,通过坐标变换(Clark/Park)实现解耦控制,达到精密定位目的。文章包含完整的建模步骤:从主电路搭建、三环PID设计到坐标变换与SVPWM调制实现,并提供了核心控制算法的MATLAB代码。通过工业机械臂关节场景验证,系统在阶跃响应(稳态误差0.002°)、正弦跟踪(误差0.008°)和抗扰动性能(恢复时间0.05s)方面表现优异。最后还提出了前馈补偿、扰动观测器等优化方向。该方案适
iOS远程真机之ios-minicap安装使用完全指南
minicap 是开源项目 STF 中的高速截图工具。STF利用此工具不断的传输图片信息并在web端绘制实现 以前只有Android版本,最近有新的ios版本,现在就安装过程中遇到的一些问题进行分享(ps:感谢sorccu 在issue里面给我的指点) 首先上地址:https://github.com/openstf/ios-minicap 你可以git clone或者直接下载zip包。
轻量化部署实战:C#上位机集成AI模型的3种方案深度对比(ML.NET/ONNX/TensorFlow.NET)
C#上位机部署AI模型,核心不是“选最强大的方案”,而是“选最适配的方案”——工控机的低配置、高稳定性需求,决定了“轻量化”和“部署简单”是选型的首要原则。回顾3种方案:ML.NET:原生、轻量化、零依赖,适合传统ML场景,低配置工控机首选;ONNX Runtime:通用、平衡、易落地,适合深度学习场景,工业落地首选;TensorFlow.NET:强大、灵活、纯C#,适合复杂模型,高配置工控机首选。
飞牛fnNAS搭建web版微信
摘要:本文介绍了一种通过Docker在飞牛NAS上部署微信客户端的方法,实现24小时同步微信聊天记录。具体步骤包括:1)激活飞牛NAS的Docker功能并配置镜像加速源;2)创建专用文件夹并下载docker-wechat镜像;3)设置容器参数并部署微信客户端;4)通过局域网或ZeroTier内网穿透实现远程访问。相比传统Windows/Linux方案,该方法资源占用更低,适合需要长期保存微信聊天记录的用户。
STM32F407中文手册
STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。
最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版
Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。
efm32 入门.pdf
本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。
IDEA的使用指南
IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.
8608



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



