Java 模拟简单搜索

实体类

package org.dennisit.entity;

/***

*

* @version : 1.0

*

* @author : 苏若年 发送邮件

*

* @since : 1.0 创建时间: 2013-4-8 下午04:51:03

*

* @function: TODO

*

*/

public classMedicine {

private Integer id;

private String name;

private String function;

public Medicine() {

super();

}

public Medicine(Integer id, String name, String function) {

super();

this.id = id;

this.name = name;

this.function = function;

}

//getter and setter ()

}

模拟数据

package org.dennisit.entity;

import java.util.ArrayList;

import java.util.List;

import org.dennisit.util.JsonUtil;

/***

*

* @version : 1.0

*

* @author : 苏若年 发送邮件

*

* @since : 1.0 创建时间: 2013-4-8 上午11:38:15

*

* @function: TODO

*

*/

public classDataFactory {

public static DataFactory dataFactory = new DataFactory();

private DataFactory(){

}

public DataFactory getInstance(){

return dataFactory;

}

public static List getInitJsonData(){

List list = new ArrayList();

String data1 = JsonUtil.obj2JsonData(new Medicine(1,"银花 感冒 颗粒","功能主治:银花感冒颗粒 ,头痛,清热,解表,利咽。"));

String data2 = JsonUtil.obj2JsonData(new Medicine(2,"感冒 止咳糖浆","功能主治:感冒止咳糖浆,解表清热,止咳化痰。"));

String data3 = JsonUtil.obj2JsonData(new Medicine(3,"感冒灵颗粒","功能主治:解热镇痛。头痛 ,清热。"));

String data4 = JsonUtil.obj2JsonData(new Medicine(4,"感冒 灵胶囊","功能主治:银花感冒颗粒 ,头痛,清热,解表,利咽。"));

String data5 = JsonUtil.obj2JsonData(new Medicine(5,"仁和 感冒 颗粒","功能主治:疏风清热,宣肺止咳,解表清热,止咳化痰。"));

list.add(data1);

list.add(data2);

list.add(data3);

list.add(data4);

list.add(data5);

return list;

}

}

应用工具类

package org.dennisit.util;

import java.io.IOException;

import org.dennisit.entity.Medicine;

import org.elasticsearch.common.xcontent.XContentBuilder;

import org.elasticsearch.common.xcontent.XContentFactory;

/***

*

* @version : 1.0

*

* @author : 苏若年 发送邮件

*

* @since : 1.0 创建时间: 2013-4-8 上午11:34:56

*

* @function: TODO

*

*/

public classJsonUtil {

/*** 实现将实体对象转换成json对象

* @param medicine Medicine对象

* @return

*/

public static String obj2JsonData(Medicine medicine){

String jsonData = null;

try {

//使用XContentBuilder创建json数据

XContentBuilder jsonBuild = XContentFactory.jsonBuilder();

jsonBuild.startObject()

.field("id",medicine.getId())

.field("name", medicine.getName())

.field("funciton",medicine.getFunction())

.endObject();

jsonData = jsonBuild.string();

System.out.println(jsonData);

} catch (IOException e) {

e.printStackTrace();

}

return jsonData;

}

}

ElasticSearch 核心搜索模拟类

package org.dennisit.elastic.process;

import java.util.ArrayList;

import java.util.List;

import org.dennisit.entity.DataFactory;

import org.dennisit.entity.Medicine;

import org.elasticsearch.action.index.IndexRequestBuilder;

import org.elasticsearch.action.index.IndexResponse;

import org.elasticsearch.action.search.SearchResponse;

import org.elasticsearch.client.Client;

import org.elasticsearch.client.transport.TransportClient;

import org.elasticsearch.common.transport.InetSocketTransportAddress;

import org.elasticsearch.index.query.QueryBuilder;

import org.elasticsearch.index.query.QueryBuilders;

import org.elasticsearch.search.SearchHit;

import org.elasticsearch.search.SearchHits;

/***

*

* @version : 1.0

*

* @author : 苏若年 发送邮件

*

* @since : 1.0 创建时间: 2013-4-8 上午11:34:04

*

* @function: TODO

*

*/

public classElasticSearchHandler {

private Client client;

public ElasticSearchHandler(){

//使用本机做为节点

this("127.0.0.1");

}

public ElasticSearchHandler(String ipAddress){

//集群连接超时设置

/*Settings settings = ImmutableSettings.settingsBuilder().put("client.transport.ping_timeout", "10s").build();

client = new TransportClient(settings);

*/

client = new TransportClient().addTransportAddress(new InetSocketTransportAddress(ipAddress, 9300));

}

/*** 建立索引,索引建立好之后,会在elasticsearch-0.20.6\data\elasticsearch\nodes\0创建所以你看

* @param indexName 为索引库名,一个es集群中可以有多个索引库。 名称必须为小写

* @param indexType Type为索引类型,是用来区分同索引库下不同类型的数据的,一个索引库下可以有多个索引类型。

* @param jsondata json格式的数据集合

*

* @return

*/

public void createIndexResponse(String indexname, String type, List jsondata){

//创建索引库 需要注意的是.setRefresh(true)这里一定要设置,否则第一次建立索引查找不到数据

IndexRequestBuilder requestBuilder = client.prepareIndex(indexname, type).setRefresh(true);

for(int i=0; i

requestBuilder.setSource(jsondata.get(i)).execute().actionGet();

}

}

/*** 创建索引

* @param client

* @param jsondata

* @return

*/

public IndexResponse createIndexResponse(String indexname, String type,String jsondata){

IndexResponse response = client.prepareIndex(indexname, type)

.setSource(jsondata)

.execute()

.actionGet();

return response;

}

/*** 执行搜索

* @param queryBuilder

* @param indexname

* @param type

* @return

*/

public List searcher(QueryBuilder queryBuilder, String indexname, String type){

List list = new ArrayList();

SearchResponse searchResponse = client.prepareSearch(indexname).setTypes(type)

.setQuery(queryBuilder)

.execute()

.actionGet();

SearchHits hits = searchResponse.hits();

System.out.println("查询到记录数=" + hits.getTotalHits());

SearchHit[] searchHists = hits.getHits();

if(searchHists.length>0){

for(SearchHit hit:searchHists){

Integer id = (Integer)hit.getSource().get("id");

String name = (String) hit.getSource().get("name");

String function = (String) hit.getSource().get("funciton");

list.add(new Medicine(id, name, function));

}

}

return list;

}

public static void main(String[] args) {

ElasticSearchHandler esHandler = new ElasticSearchHandler();

List jsondata = DataFactory.getInitJsonData();

String indexname = "indexdemo";

String type = "typedemo";

esHandler.createIndexResponse(indexname, type, jsondata);

//查询条件

QueryBuilder queryBuilder = QueryBuilders.fieldQuery("name", "感冒");

/*QueryBuilder queryBuilder = QueryBuilders.boolQuery()

.must(QueryBuilders.termQuery("id", 1));*/

List result = esHandler.searcher(queryBuilder, indexname, type);

for(int i=0; i

Medicine medicine = result.get(i);

System.out.println("(" + medicine.getId() + ")药品名称:" +medicine.getName() + "\t\t" + medicine.getFunction());

}

}

}

启动 ElasticSearch(window 下 bin/elasticsearch.bat)

程序运行前, 默认的 nodes 目录下没有内容 , 运行程序后会建立如下目录

控制台输出信息

{"id":1,"name":"银花 感冒 颗粒","funciton":"功能主治:银花感冒颗粒 ,头痛,清热,解表,利咽。"}

{"id":2,"name":"感冒 止咳糖浆","funciton":"功能主治:感冒止咳糖浆,解表清热,止咳化痰。"}

{"id":3,"name":"感冒灵颗粒","funciton":"功能主治:解热镇痛。头痛 ,清热。"}

{"id":4,"name":"感冒 灵胶囊","funciton":"功能主治:银花感冒颗粒 ,头痛,清热,解表,利咽。"}

{"id":5,"name":"仁和 感冒 颗粒","funciton":"功能主治:疏风清热,宣肺止咳,解表清热,止咳化痰。"}

查询到记录数=5

(4)药品名称:感冒 灵胶囊 功能主治:银花感冒颗粒 ,头痛,清热,解表,利咽。

(1)药品名称:银花 感冒 颗粒 功能主治:银花感冒颗粒 ,头痛,清热,解表,利咽。

(2)药品名称:感冒 止咳糖浆 功能主治:感冒止咳糖浆,解表清热,止咳化痰。

(3)药品名称:感冒灵颗粒 功能主治:解热镇痛。头痛 ,清热。

(5)药品名称:仁和 感冒 颗粒 功能主治:疏风清热,宣肺止咳,解表清热,止咳化痰。

集群管理工具Head 查看信息

附录 :

ElasticSearch 安装插件 elasticsearch-head 插件

安装完之后 , 在 lasticsearch-0.20.6\plugins\ 目录下就多了 head 插件

直接打开目录中的 index.html 文件即可进入管理工具

java list 模拟查询_java 模拟简单搜索相关推荐

  1. java 模拟电梯_java模拟电梯运行简单实现,swing界面

    每次只能一个人,,,功能不全 import javax.swing.*; import java.awt.*; import java.util.*; public class Hufan exten ...

  2. java 模拟鼠标_java实现简单的模拟键盘鼠标操作

    简简单单的记录: 近期需要用到模拟键盘鼠标操作,所以记录下来,以备后用,看了很多例子,未标明引用,请见谅 package com.text.jna; import javax.imageio.Imag ...

  3. java httpget 设置参数_java 模拟HTTP doPost请求 设置参数 | 学步园

    请求模拟 package org.zlex.commons.net; import java.io.DataInputStream; import java.io.DataOutputStream; ...

  4. java 模拟时钟_java模拟时钟

    本次课程设计采用时间片轮转调度算法来实现模拟进程调度任务的执行过 程. 用 Java 模拟进程调度过程,可以方便地将运行结果直观地表示出来.Java 语言 独有的多...... 本次课程设计采用时间片 ...

  5. java 表单请求_java模拟表单请求

    表单普通字段 public class FormFieldKeyValuePair { private static final long serialVersionUID = 1L; // The ...

  6. java模拟新浪微博_Java模拟新浪微博用户注册

    模拟新浪微博用户注册 User.java package gather.sina; public class User { private String username; private Strin ...

  7. java模拟器键盘输入_Java模拟鼠标和键盘输入

    用途 在电脑(Windows/Mac)上模拟鼠标和键盘输入 Mac运行需要打开相关权限,详见文末说明. 效果图 代码 import java.awt.*; import java.awt.event. ...

  8. java实现多线程抢单_Java模拟多线程实现抢票代码实例

    这篇文章主要介绍了Java模拟多线程实现抢票,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 实现100张票抢购的demo 这里需要一个变量,来保存1 ...

  9. java抽奖窗口程序_java模拟一个抽奖程序

    今天用一个程序模拟一个从1-32之间,随机抽取7组号码的抽奖程序 * 需要使用Java的图形界面知识 * 窗口  JFrame * 面板  JPanel * 显示文本信息的标签  JLabel * 文 ...

  10. java post json请求_java模拟post请求发送json

    java模拟post请求发送json,用两种方式实现,第一种是HttpURLConnection发送post请求,第二种是使用httpclient模拟post请求. 方法一: public stati ...

最新文章

  1. react创建组件_如何使用React创建时间轴组件
  2. 自定义对话框 ,加载动画
  3. 怎么在windows安装python模块_如何在windows环境下安装python里的模块
  4. TCP/IP入门(4) --应用层
  5. tcp协议中的长连接和短连接服务器,谈谈HTTP协议中的短轮询、长轮询、长连接和短链接...
  6. 企业级docker私有仓库的配置与使用
  7. 计算机网络考试卷2014B答案,计算机网络考试卷2014B
  8. 深入剖析 redis AOF 持久化策略
  9. python解释器安装步骤_怎么安装python解释器
  10. POJ 1080 Gene
  11. 苹果手机手机用数据线连接苹果电脑时为何会一直断开无法连接
  12. 1FN3直线电机基于海德汉光栅尺和SIMOTION的调试
  13. cad2012打开后闪退_win10系统打开CAd2012出现闪退的恢复方法
  14. 人人商城秒杀redis配置
  15. 【小样本基础】Meta-Learning 元学习流程:图解MAML代码
  16. 游戏开发unity杂项知识系列:Failed to resolve project template:Failed to decompress
  17. 四个视频营销策略,让你火过傅园慧,Papi酱
  18. 课程设计-商店管理系统(一)----前端页面的制作(一)
  19. 发现身边感动,寻找最美龙江测绘人
  20. 沈阳师范大学PTA百题刷分

热门文章

  1. 弱引用什么时候被回收_Java中的强软弱虚引用
  2. 会javascript,你才是前端工程师!
  3. select中常用的对象
  4. maven如何添加404页面
  5. for循环中取出最大最小 累加_使用 for 循环实现从 1 累加至 10。_学小易找答案...
  6. linux git clone 401,Git Eclipse:401未经授权的错误
  7. idea 背景色修改_IDEA使用调优配置
  8. apache iotdb_高性能轻体量物联网数据库Apache IoTDB
  9. 聊聊rocketmq的SequenceProducerImpl
  10. 苹果iCloud大调整:干掉1TB版本,2TB降价