Java 模拟简单搜索

实体类

package org.dennisit.entity;
/**
*
*
* @version : 1.0
*
* @author : 苏若年 <a href="mailto:DennisIT@163.com">发送邮件</a>
*
* @since : 1.0 创建时间: 2013-4-8 下午04:51:03
*
* @function: TODO
*
*/
public class Medicine { 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 : 苏若年 <a href="mailto:DennisIT@163.com">发送邮件</a>
*
* @since : 1.0 创建时间: 2013-4-8 上午11:38:15
*
* @function: TODO
*
*/
public class DataFactory { public static DataFactory dataFactory = new DataFactory(); private DataFactory(){ } public DataFactory getInstance(){
return dataFactory;
} public static List<String> getInitJsonData(){
List<String> list = new ArrayList<String>();
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 : 苏若年 <a href="mailto:DennisIT@163.com">发送邮件</a>
*
* @since : 1.0 创建时间: 2013-4-8 上午11:34:56
*
* @function: TODO
*
*/
public class JsonUtil { /**
* 实现将实体对象转换成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 : 苏若年 <a href="mailto:DennisIT@163.com">发送邮件</a>
*
* @since : 1.0 创建时间: 2013-4-8 上午11:34:04
*
* @function: TODO
*
*/
public class ElasticSearchHandler { 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<String> jsondata){
//创建索引库 需要注意的是.setRefresh(true)这里一定要设置,否则第一次建立索引查找不到数据
IndexRequestBuilder requestBuilder = client.prepareIndex(indexname, type).setRefresh(true);
for(int i=0; i<jsondata.size(); 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<Medicine> searcher(QueryBuilder queryBuilder, String indexname, String type){
List<Medicine> list = new ArrayList<Medicine>();
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<String> 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<Medicine> result = esHandler.searcher(queryBuilder, indexname, type);
for(int i=0; i<result.size(); 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 模拟简单搜索的更多相关文章

  1. python--selenium简单模拟百度搜索点击器

    python--selenium简单模拟百度搜索点击器 发布时间:2018-02-28 来源:网络 上传者:用户 关键字: selenium 模拟 简单 点击 搜索 百度 发表文章摘要:用途:简单模拟 ...

  2. 《ElasticSearch6.x实战教程》之简单搜索、Java客户端(上)

    第五章-简单搜索 众里寻他千百度 搜索是ES的核心,本节讲解一些基本的简单的搜索. 掌握ES搜索查询的RESTful的API犹如掌握关系型数据库的SQL语句,尽管Java客户端API为我们不需要我们去 ...

  3. 使用Java模拟一个简单的Dos学生成绩管理系统:

    使用Java模拟学生成绩管理系统... ------------------- 学生成绩管理系统:需要实现的功能:1.录入学生的姓名和成绩2.显示列表.列表中包括学生姓名与成绩3.显示最高分.最低分的 ...

  4. java模拟浏览器包selenium整合了htmlunit,火狐浏览器,IE浏览器,opare浏览器驱

    //如果网页源码中有些内容是js渲染过来的,那你通过HttpClient直接取肯定取不到,但是这些数据一般都是通过异步请求传过来的(一般都是通过ajax的get或者post方式).那么你可以通过火狐浏 ...

  5. Java模拟登陆02【转载】

    在使用java访问URL时,如果该URL需要身份验证,那么就不能够直接访问,因为没有登陆.那么,如何解决这个问题呢?     方法是使用java模拟登陆,登陆后记录下cookie信息,在下次发起请求时 ...

  6. 分布式搜索ElasticSearch构建集群与简单搜索实例应用

    分布式搜索ElasticSearch构建集群与简单搜索实例应用 关于ElasticSearch不介绍了,直接说应用. 分布式ElasticSearch集群构建的方法. 1.通过在程序中创建一个嵌入es ...

  7. Elasticsearch java api 基本搜索部分详解

    文档是结合几个博客整理出来的,内容大部分为转载内容.在使用过程中,对一些疑问点进行了整理与解析. Elasticsearch java api 基本搜索部分详解 ElasticSearch 常用的查询 ...

  8. websocket通信 实现java模拟一个client与webclient通信

    发文原由: 熟悉socket通信的同学,对于socket模拟server与client,实现相互通信, 或者使用websocket与java模拟的websocket服务器通信(比如一个聊天室),对于这 ...

  9. 强化学习(十八) 基于模拟的搜索与蒙特卡罗树搜索(MCTS)

    在强化学习(十七) 基于模型的强化学习与Dyna算法框架中,我们讨论基于模型的强化学习方法的基本思路,以及集合基于模型与不基于模型的强化学习框架Dyna.本文我们讨论另一种非常流行的集合基于模型与不基 ...

随机推荐

  1. 用多线程发送邮箱(一次给一个用户发送N封邮件)

    前台不用写,后台执行方法就可以了. namespace SendMail { public partial class SendMail_Page : System.Web.UI.Page { pro ...

  2. C++ 系列:iostream 的用途与局限

    转载自http://www.cnblogs.com/Solstice/archive/2011/07/17/2108715.html 本文主要考虑 x86 Linux 平台,不考虑跨平台的可移植性,也 ...

  3. 实现虚拟机VMware上Linux与本机windows互相复制与粘贴的问题

    解决方法:只需要在Linux系统中安装一个vmware-tools的工具 1.选择虚拟机菜单,有安装vmware tools 工具的选项 点击之后,在Linux的桌面下会出现 VMwareTools. ...

  4. Redis中取出值,转成对象

    import com.fasterxml.jackson.databind.ObjectMapper; //转成companyEntity CompanyEntity company = mapper ...

  5. thinkphp ajax返回

    ThinkPHP可以很好的支持AJAX请求,系统的\Think\Controller类提供了ajaxReturn方法用于AJAX调用后返回数据给客户端.并且支持JSON.JSONP.XML和EVAL四 ...

  6. 「题解」:$e$

    问题 B: $e$ 时间限制: 2 Sec  内存限制: 512 MB 题面 题面谢绝公开. 题解 话说一天考两个主席树这回事…… 正解可以叫树上主席树??(脸哥说也叫主席树上树???) 对于树上的每 ...

  7. 0917CSP-S模拟测试赛后总结

    机房搬家后的首战,便是失利. 依旧是挂掉了.这次状态有大问题. 然而状态的问题归根结底还是实力不行. 大约一个小时左右我拿到了T1的部分分.赛时判断了一下大概是高分. (不过赛后发现确实不算什么太高的 ...

  8. LUOGU P2564 [SCOI2009]生日礼物 (队列+模拟)

    传送门 解题思路 还是比较好想的,用一个队列,然后把所有点放在一起排个序,依次入队.每次检查队头元素的种类是否为当前入队元素种类,是的话就一直\(pop\),每次更新答案即可. 代码 #include ...

  9. 让delphi2010能有delphi7的版面布局

    如何让delphi2010能有delphi7的版面布局呢?答案是肯定的,方法如下: 1)在工具栏点右键,选择components 会看到delphi7中的组件显示面板 2)tools > opt ...

  10. 9.1 mongo_python.py

    # 安装 pymongo pip install pymongo import pymongo try: # 1.链接mongod的服务 mongo_py = pymongo.MongoClient( ...