Wie man mit Java eine Volltextsuchanwendung auf Basis von Elasticsearch entwickelt
Die Volltextsuche ist im heutigen Informationszeitalter eine sehr wichtige Technologie. Sie kann schnell und genau nach Schlüsselwörtern suchen, die von Benutzern in großen Mengen benötigt werden Textdaten oder verwandte Informationen. Als verteilte Open-Source-Suchmaschine wird Elasticsearch aufgrund seiner effizienten Volltextabfragefunktionen, Echtzeit-Datenanalyse und Skalierbarkeit häufig eingesetzt. In diesem Artikel wird erläutert, wie Sie mithilfe von Java eine auf Elasticsearch basierende Volltextsuchanwendung entwickeln, und es werden spezifische Codebeispiele bereitgestellt.
<dependencies> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>7.10.0</version> </dependency> </dependencies>
import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestClientBuilder; import org.elasticsearch.client.RestHighLevelClient; public class ElasticsearchClient { public static RestHighLevelClient createClient() { // 配置Elasticsearch服务器地址 RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200, "http")); // 创建高级客户端实例 RestHighLevelClient client = new RestHighLevelClient(builder); return client; } }
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest; import org.elasticsearch.action.admin.indices.create.CreateIndexResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.xcontent.XContentType; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentFactory; import org.elasticsearch.common.xcontent.XContentFactory.*; public class IndexCreator { public static void createIndex(String indexName) { try { RestHighLevelClient client = ElasticsearchClient.createClient(); // 创建索引请求 CreateIndexRequest request = new CreateIndexRequest(indexName); // 设置索引的映射规则 XContentBuilder mappingBuilder = XContentFactory.jsonBuilder(); mappingBuilder.startObject(); mappingBuilder.startObject("properties"); mappingBuilder.startObject("title"); mappingBuilder.field("type", "text"); mappingBuilder.endObject(); mappingBuilder.startObject("content"); mappingBuilder.field("type", "text"); mappingBuilder.endObject(); mappingBuilder.endObject(); mappingBuilder.endObject(); request.mapping(mappingBuilder); // 执行创建索引请求 CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT); // 处理响应结果 if (response.isAcknowledged()) { System.out.println("索引创建成功:" + indexName); } else { System.out.println("索引创建失败:" + indexName); } // 关闭客户端连接 client.close(); } catch (Exception e) { e.printStackTrace(); } } }
import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.xcontent.XContentType; public class DocumentIndexer { public static void indexDocument(String indexName, String documentId, String title, String content) { try { RestHighLevelClient client = ElasticsearchClient.createClient(); // 创建文档索引请求 IndexRequest request = new IndexRequest(indexName); request.id(documentId); request.source("title", title); request.source("content", content); // 执行文档索引请求 IndexResponse response = client.index(request, RequestOptions.DEFAULT); // 处理响应结果 if (response.status().getStatus() == 201) { System.out.println("文档索引成功:" + documentId); } else { System.out.println("文档索引失败:" + documentId); } // 关闭客户端连接 client.close(); } catch (Exception e) { e.printStackTrace(); } } }
import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.QueryBuilders.*; import org.elasticsearch.search.builder.SearchSourceBuilder; public class DocumentSearcher { public static void searchDocument(String indexName, String keyword) { try { RestHighLevelClient client = ElasticsearchClient.createClient(); // 创建搜索请求 SearchRequest request = new SearchRequest(indexName); SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.query(QueryBuilders.matchQuery("content", keyword)); request.source(sourceBuilder); // 执行搜索请求 SearchResponse response = client.search(request, RequestOptions.DEFAULT); // 处理响应结果 if (response.getHits().getTotalHits().value > 0) { System.out.println("搜索结果:"); for (SearchHit hit : response.getHits().getHits()) { System.out.println(hit.getSourceAsString()); } } else { System.out.println("未找到相关文档"); } // 关闭客户端连接 client.close(); } catch (Exception e) { e.printStackTrace(); } } }
Mit dem obigen Codebeispiel können wir die Entwicklung einer auf Elasticsearch basierenden Volltext-Retrieval-Anwendung abschließen. Durch die Erstellung eines Index, die Indizierung von Dokumenten und die Suche nach Dokumenten können wir eine effiziente und genaue Volltextsuche erreichen. Zusätzlich zu den oben gezeigten Grundfunktionen unterstützt Elasticsearch natürlich auch verschiedene erweiterte Abfragen, aggregierte Analysen, verteilte Bereitstellung und andere Funktionen und kann je nach spezifischem Bedarf weiterentwickelt und erweitert werden. Ich hoffe, dass dieser Artikel für Sie hilfreich ist, und wünsche Ihnen viel Erfolg auf dem Gebiet der Volltextrecherche!
Das obige ist der detaillierte Inhalt vonWie man mit Java eine Volltextsuchanwendung auf Basis von Elasticsearch entwickelt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!