Elasticsearch简单使用

本文介绍如何使用Elasticsearch进行数据索引与搜索操作,包括安装配置、数据导入、查询等功能,并通过具体示例展示了如何利用Elasticsearch进行高效的数据检索。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下载地址:http://www.elasticsearch.cn/download/2013/02/26/0.90.0.Beta1.html

下载后解压点击bin/elasticsearch.bat既可以运行

php查看插件:https://github.com/nervetattoo/elasticsearch

解压到\plugins\head\_site, 没有目录则自行创建目录

解压后网址输入即可查看  http://localhost:9200/_plugin/head/


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 search;
import java.util.ArrayList;
import java.util.List;
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;

public class ElasticSearchHandler {

	private Client client;

	public ElasticSearchHandler() {
		// 使用本机做为节点
		this("127.0.0.1");
	}

	public ElasticSearchHandler(String ipAddress) {
		// 集群连接超时设置
		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.getHits();
		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 = "indexdemos";
		String type = "typedemos";
		// 创建索引,只需创建一次
		esHandler.createIndexResponse(indexname, type, jsondata);
		// 查询条件
		QueryBuilder queryBuilder = QueryBuilders.fieldQuery("funciton", "止咳化痰");
		// 全匹配查询
//		QueryBuilder queryBuilder = QueryBuilders.boolQuery()
//				.must(QueryBuilders.termQuery("id", 3));
		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());
		}
	}
}

package search;

import java.io.IOException;

import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;

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;
    }

}

package search;

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;
    }

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getFunction() {
		return function;
	}

	public void setFunction(String function) {
		this.function = function;
	}
    
    
}

运行结果

{"id":1,"name":"银花 感冒 颗粒","funciton":"功能主治:银花感冒颗粒 ,头痛,清热,解表,利咽。"}
{"id":2,"name":"感冒  止咳糖浆","funciton":"功能主治:感冒止咳糖浆,解表清热,止咳化痰。"}
{"id":3,"name":"感冒灵颗粒","funciton":"功能主治:解热镇痛。头痛 ,清热。"}
{"id":4,"name":"感冒  灵胶囊","funciton":"功能主治:银花感冒颗粒 ,头痛,清热,解表,利咽。"}
{"id":5,"name":"仁和 感冒 颗粒","funciton":"功能主治:疏风清热,宣肺止咳,解表清热,止咳化痰。"}
查询到记录数=2
(5)药品名称:仁和 感冒 颗粒 功能主治:疏风清热,宣肺止咳,解表清热,止咳化痰。
(2)药品名称:感冒  止咳糖浆 功能主治:感冒止咳糖浆,解表清热,止咳化痰。


转载地址:http://www.cnblogs.com/dennisit/archive/2013/04/08/3008631.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值