本篇文章主要介绍了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
如果重新启动后还是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
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.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"> <modelVersion>4.0.0</modelVersion> <groupId>com.jk</groupId> <artifactId>ElasticsearchExample</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>transport</artifactId> <!--用哪个版本就填什么--> <version>5.4.0</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.7</version> </dependency> </dependencies> </project>
以下是常用的几种操作
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) { //高亮多个字段 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(); } }
Atas ialah kandungan terperinci 强大的Elastisearch搜索引擎在Java中使用的实例代码. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

BytecodeachievesplatformindependenceBebyBeingExecutedyavirtualMachine (VM), membolehkanCodeTorunonanyplatformWithTheAppropriatevm.Forexample, JavabytecodecanrunonanydeviceVmm, enabling "

Java tidak dapat mencapai kemerdekaan platform 100%, tetapi kemerdekaan platformnya dilaksanakan melalui JVM dan bytecode untuk memastikan kod tersebut berjalan pada platform yang berbeza. Pelaksanaan spesifik termasuk: 1. Kompilasi ke bytecode; 2. Tafsiran dan pelaksanaan JVM; 3. Konsistensi Perpustakaan Standard. Walau bagaimanapun, perbezaan pelaksanaan JVM, sistem operasi dan perbezaan perkakasan, dan keserasian perpustakaan pihak ketiga boleh menjejaskan kebebasan platformnya.

Java menyedari kemerdekaan platform melalui "Tulis sekali, jalankan di mana -mana" dan meningkatkan pemeliharaan kod: 1. Penggunaan semula kod tinggi dan mengurangkan pembangunan pendua; 2. Kos penyelenggaraan yang rendah, hanya satu pengubahsuaian yang diperlukan; 3. Kecekapan kerjasama pasukan tinggi adalah tinggi, mudah untuk perkongsian pengetahuan.

Cabaran utama yang dihadapi mewujudkan JVM pada platform baru termasuk keserasian perkakasan, keserasian sistem operasi, dan pengoptimuman prestasi. 1. Keserasian perkakasan: Adalah perlu untuk memastikan bahawa JVM dapat menggunakan set arahan pemproses platform baru, seperti RISC-V. 2. Keserasian sistem operasi: JVM perlu memanggil API sistem platform baru dengan betul, seperti Linux. 3. Pengoptimuman Prestasi: Ujian dan Penalaan Prestasi diperlukan, dan strategi pengumpulan sampah diselaraskan untuk menyesuaikan diri dengan ciri -ciri memori platform baru.

JavafxeffectivelyaddressesplatforminconsistencyiDevelopmentbybyusingapform-agnosticscenegraphandcsssstyling.1) Itabstractsplatformspecificsthroughascenegraph, memastikan konsistenRenderingAscrosswindows, macoS, danLinux.2)

JVM berfungsi dengan menukar kod Java ke dalam kod mesin dan menguruskan sumber. 1) Pemuatan Kelas: Muatkan fail kelas. Ke dalam memori. 2) Kawasan data runtime: Menguruskan kawasan memori. 3) Enjin Pelaksanaan: Mentafsirkan atau menyusun bytecode pelaksanaan. 4) Antara muka kaedah tempatan: Berinteraksi dengan sistem operasi melalui JNI.

JVM membolehkan Java melintasi platform. 1) Beban JVM, mengesahkan dan melaksanakan bytecode. 2) Kerja JVM termasuk pemuatan kelas, pengesahan bytecode, pelaksanaan tafsiran dan pengurusan ingatan. 3) JVM menyokong ciri -ciri canggih seperti pemuatan dan refleksi kelas dinamik.

Aplikasi Java boleh dijalankan pada sistem pengendalian yang berbeza melalui langkah -langkah berikut: 1) Gunakan kelas fail atau laluan untuk memproses laluan fail; 2) menetapkan dan mendapatkan pembolehubah persekitaran melalui System.getenv (); 3) Gunakan Maven atau Gradle untuk menguruskan kebergantungan dan ujian. Keupayaan merentas platform Java bergantung pada lapisan abstraksi JVM, tetapi masih memerlukan pengendalian manual ciri-ciri khusus sistem operasi tertentu.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

EditPlus versi Cina retak
Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Pelayar Peperiksaan Selamat
Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

Penyesuai Pelayan SAP NetWeaver untuk Eclipse
Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.
