Java使用强大的Elastisearch搜索引擎实例代码

网友投稿 291 2023-05-14


Java使用强大的Elastisearch搜索引擎实例代码

Elastisearch是一个很强大,易用的搜索引擎

在系统上运行Elastisearch只需以下几步

1.下载Elastisearch

复制代码 代码如下:

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.4.0.zip

2.解压

unzip elasticsearch-5.4.0.zip

3.运行

elasticsearch-5.4.0/bin/elasticsearch

这时有可能会直接被Killed掉,因为内存溢出(OOM),elastisearch占用的内存非常大,所以在内存比较小的服务器上运行要先修改jvm的内存大小

vi elasticsearch-5.4.0/config/jvm.options

将22和23行的栈堆大小改为512M

-Xms512M

-Xmx512M

如果重新启动后http://还是killed就再改小一点

4.测试是否成功

curl 'http://localhost:9200/?pretty'

你能看到以下返回信息:

{

"status": 200,

"name": "Shrunken Bones",

"version": {

"number": "1.4.0",

"lucene_version": "4.10"

},

"tagline": "You Know, for Search"

}

则表明启动成功

接下来我们用java的API来操作Elasticsearch

首先是导入elastisearch和log4j的包

POM

xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.jk

ElasticsearchExample

1.0-SNAPSHOT

org.elasticsearch.client

transport

5.4.0

org.apache.logging.log4j

log4j-api

2.7

xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.jk

ElasticsearchExample

1.0-SNAPSHOT

org.elasticsearch.client

transport

5.4.0

org.apache.logging.log4j

log4j-api

2.7

以下是常用的几种操作

1.创建client

Client client = null;

try {

client = new PreBuiltTransportClient(Settings.EMPTY)

.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));

} catch (Exception e) {

e.printStackTrace();

}

2.创建索引

/**

* 创建索引,有则先删除

* @param client

*/

private static void recreateIndex(Client client) {

if (client.admin().indices().prepareExists(index).execute().actionGet()

.isExists()) {

DeleteIndexResponse deleteIndexResponse = client.admin().indices()

.delete(new DeleteIndexRequest(index)).actionGet();

System.out.println("delete index :");

System.out.println(deleteIndexResponse);

}

CreateIndexResponse createIndexResponse = client.admin().indices()

.prepareCreate(index).execute().actionGet();

System.out.println("create index :");

System.out.println(createIndexResponse);

}

3.插入数据

/**

* 插入数据

* @param client

*/

@SuppressWarnings({"rawtypes", "unchecked"})

private static void doIndex(final Client client) {

Map s11 = new LinkedHashMap();

s11.put("title", "Think in java");

s11.put("origin", "美国");

s11.put("description", "初级java开发人员必读的书");

s11.put("author", "Bruce Eckel");

s11.put("price", 108);

Map s12 = new LinkedHashMap();

s12.put("title", "Head First Java");

s12.put("origin", "英国");

s12.put("description", "java入门教材");

s12.put("author", "Kathy Sierra");

s12.put("price", 54);

Map s21 = new LinkedHashMap();

s21.put("title", "Design Pattern");

s21.put("origin", "法国");

s21.put("description", "程序员不得不读的设计模式");

s21.put("author", "Kathy Sierra");

s21.put("price", 89);

Map s22 = new LinkedHashMap();

s22.put("title", "黑客与画家");

s22.put("origin", "法国");

s22.put("description", "读完之后脑洞大开");

s22.put("author", "Paul Graham");

s22.put("price", 35);

BulkResponse bulkResponse = client

.prepareBulk()

.add(client.prepareIndex(index, type).setId("11").setSource(s11).setOpType(IndexRequest.OpType.INDEX).request())

.add(client.prepareIndex(index, type).setId("12").setSource(s12).setOpType(IndexRequest.OpType.INDEX).request())

.add(client.prepareIndex(index, type).setId("21").setSource(s21).setOpType(IndexRequest.OpType.INDEX).request())

.add(client.prepareIndex(index, type).setId("22").setSource(s22).setOpType(IndexRequest.OpType.INDEX).request())

.execute().actionGet();

if (bulkResponse.hasFailures()) {

System.err.println("index docs ERROR:" + bulkResponse.buildFailureMessage());

} else {

System.out.println("index docs SUCCESS:");

System.out.println(bulkResponse);

}

}

4.查询所有

/**

* 查询所有

*/

private static void searchAll(Client client) {

SearchResponse response = client.prepareSearch(index)

.setQuery(QueryBuilders.matchAllQuery())

.setExplain(true).execute().actionGet();

System.out.println("searchAll : ");

for (SearchHit searchHit : response.getHits()) {

System.out.println("********");

System.out.println(searchHit.getSource());

}

}

5.关键词查询

/**

* 关键词查询

*

* @param client

*/

private static void searchKeyWord(Client client) {

SearchResponse response = client.prepareSearch(index)

//查询所有字段匹配关键字

.setQuery(QueryBuilders.matchQuery("_all", "法国"))

//设置最小匹配程度

// .setQuery(QueryBuilders.matchQuery("_all", "法国").minimumShouldMatch("100%"))

.execute().actionGet();

System.out.println("searchKeyWord : ");

System.out.println(response);

}

6.数值范围过滤

/**

* 数值范围过滤

*

* @param client

*/

private static void searchRange(Client client) {

SearchResponse response = client.prepareSearch(index).

//大于80,小于100

setQuery(QueryBuilders.rangeQuery("price").gt(80).lt(100))

.execute()

.actionGet();

System.out.println("searchRange : ");

System.out.println(response);

}

7.排序

/**

* 排序

*

* @param client

*/

private static void searchOrdered(Client client) {

SearchResponse response = client.prepareSearch(index)

.setQuery(QueryBuilders.matchAllQuery())

//根据价格降序排序

.addSort(SortBuilders.fieldSort("price")

.order(SortOrder.DESC)).execute().actionGet();

System.out.println("searchOrdered : ");

System.out.println(response);

}

8.高亮关键字

/**

* 高亮关键字

* @param client

*/

private static void searchHightlight(Client client) {

http:// //高亮多个字段

HighlightBuilder highlightBuilder = new HighlightBuilder();

highlightBuilder.field("title");

highlightBuilder.field("description");

SearchResponse response = client.prepareSearch(index)

//单条件匹配,高亮时只能高亮该字段

// .setQuery(QueryBuilders.matchQuery("title", "java"))

//多条件匹配,高亮时只能高亮多个字段

.setQuery(QueryBuilders.multiMatchQuery("开发人员必读", "title", "description"))

.highlighter(highlightBuilder)

.execute()

.actionGet();

System.out.println("searchHightlight : ");

System.out.println(response);

}

9.根据id查找

/**

* 根据id查找

* @param client

*/

private static void findById(final Client client) {

String id="12";

GetResponse response = client.prepareGet(index, type, id).get();

System.out.println("findById");

System.out.println(response);

}

10.删除

/**

* 删除

* @param client

*/

private static void deleteById(Client client) {

String id="12";

DeleteResponse response = client.prepareDelete(index, type, id).get();

}

11.更新

/**

* 更新

* @param client

*/

private static void updateById(Client client) {

try {

String id="11";

client.prepareUpdate(index, type, id)

.setDoc(jsonBuilder()

.startObject()

.field("title", "白鹿原")

.endObject())

.get();

} catch (IOException e) {

e.printStackTrace();

}

}

常用的操作就这些,代码上传到https://github.com/jkgeekJack/ElasticsearchExample


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:基于Java的正则表达式
下一篇:Mybaits配置文件之动态SQL配置备忘录
相关文章

 发表评论

暂时没有评论,来抢沙发吧~