java list 模拟查询_java 模拟简单搜索

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)

7045ef2af23b9f2c1623abac7ec435bc.png

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

97f712d7423bc6a48d463ec424217f8f.png

控制台输出信息

{"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 插件

f581f93cf6ed1892e70b2e2866a8645b.png

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值