搜索涉及到数据算法等等知识,搜索引擎也有很多,这章一一略过。。。
这里介绍的是ElasticSearch(java开源)的基本使用,包括安装,简单配置,简单初始化数据,基本的JavaAPI使用。

<>一、ElasticSearch简介

ElasticSearch是一个基于Lucene的搜索服务器,它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful
web接口,通过JSON的形式,利用HTTP或者Java客户端访问。
1、官网:https://www.elastic.co/ <https://www.elastic.co/>
2、GitHub地址:https://github.com/elastic/elasticsearch
<https://github.com/elastic/elasticsearch>

3、从2010年发布到现在,到了第七个大版本v7,热度非常。
4、依赖JDK1.8

5、版本选择
(1)之前spring-boot集成的spring-boot-starter-data-elasticsearch
默认的ES版本为5.6.X。建议使用5.6以上版本。
(2)客户端:目前Java的Transport Client使用范围比较广,未来只建议使用Java Rest API
客户端方式。HTTP使用restful API。

<>二、安装和配置

直接查看网络教程更加详细:
1、确认使用jdk1.8以上
2、下载es安装包并解压到指定目录,创建目录用于存放数据文件和日志文件
3、创建es专用的用户和用户组
4、修改配置,改成自己想要的(下面说)
5、到elasticsearch/bin目录下,直接./elasticsearch启动,./elasticsearch -d后台启动

配置文件config/elasticsearch.yml:
参考网络教程:
1、指定ip,端口
2、集群和节点名称
3、数据、日志路径
4、指定默认分词器,比如中文ik分词器插件
5、其他需要不使用默认值的配置

启动后没报错,访问http://ip:9200成功会直接返回json数据
另外,关于http查看es的各项状态指标,请网络搜索。

<>三、使用javaAPI(Transport Client)创建,删除,查询(跟http的restAPI其实一样的效果)

1、连接es服务器节点
// Settings settings = Settings.builder().put(CLUSTER_NAME,
CLUSTER_VALUE).build(); // TransportClient client = new
PreBuiltTransportClient(settings); // client.addTransportAddress(new
InetSocketTransportAddress(InetAddress.getByName(ES_ADDRESS), ES_PORT));
2、创建索引和Type
IndicesAdminClient indices = client.admin().indices(); //创建Index
indices.prepareCreate(INDEX).execute().actionGet(); //创建Type,jsonSource的"未转义\
String
jsonSource="{"type":{"properties":{"sheetContent":{"type":"text","analyzer":"whitespace"},"sheetSubmitTime":{"type":"date","format":"yyyy-MM-dd
HH:mm:ss"},"sheetTitle":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}}}}}";
PutMappingRequest mapping =
Requests.putMappingRequest(INDEX).type(TYPE).source(jsonSource,XContentType.JSON);
indices.putMapping(mapping).actionGet();
3、插入数据
BulkRequestBuilder bulkRequest = openClient().prepareBulk(); //可以循环添加
JSONObject json = JSONObject.fromObject(book); IndexRequestBuilder lrb =
openClient().prepareIndex(INDEX, TYPE, book.getId()).setSource(json);
bulkRequest.add(lrb); //批量提交 BulkResponse bulkResponse =
bulkRequest.execute().actionGet(); if (bulkResponse.hasFailures()) {
BulkItemResponse[] items = bulkResponse.getItems(); //打印失败 }else{ //成功! }
4、执行搜索
BoolQueryBuilder builderBool = QueryBuilders.boolQuery(); //关键字查询
builderBool.must(QueryBuilders.matchPhraseQuery("sheetTitle",
book.getSheetTitle())); //范围 RangeQueryBuilder rangequerybuilder =
QueryBuilders.rangeQuery("sheetSubmitTime") .from("2018-10-10 00:00:00")
.to("2018-10-10 23:59:59"); builderBool.must(rangequerybuilder); //
SearchRequestBuilder srb = openClient().prepareSearch(index).setTypes(type);
SearchResponse sr = srb.setSearchType(SearchType.DEFAULT)
.setQuery(builderBool) .addSort("sheetSubmitTime", SortOrder.DESC)
.setFrom(0).setSize(10) .setExplain(true)//是否按查询匹配度排序 .execute().actionGet();
//命中 SearchHits hits = sr.getHits(); //总数 hits.getTotalHits(); for (SearchHit
hit : hits) { //每一个 }
5、其实Java的所有API都可以通过http的restful(get\post\delete…)操作
curl -XGET http://ip <http://ip>:port/_search -d “json data…”
(-X加上请求方式。-d后面带数据体)

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信