Wie SpringBoot+Elasticsearch die Datensuche implementiert
1. Einführung
SpringBoot stellt eine Verbindung zu ElasticSearch her. Es gibt vier gängige Methoden:
Methode 1: Verbindung zum ES-Server über den Elastic Transport Client. Die zugrunde liegende Schicht basiert auf dem TCP-Protokoll Transportmodul und Remote-ES-Dienst End-to-End-Kommunikation, die Verwendung ab V7.0 wird jedoch offiziell nicht empfohlen und ab V8.0 offiziell entfernt.
Methode 2: Verbindung zum ES-Server über den Elastic Java Low Level Rest Client herstellen. Die zugrunde liegende Schicht kommuniziert mit dem Remote-ES-Server über die Restful-API, die auf dem HTTP-Protokoll basiert. Es wird nur die einfachste und grundlegendste API bereitgestellt. Ähnlich wie im vorherigen Artikel wurde Ihnen die API-Betriebslogik vorgestellt.
Methode 3: Stellen Sie eine Verbindung zum es-Server über den Elastic Java High Level Rest Client her. Die unterste Ebene ist basierend auf dem Elastic Java Low Level Rest Client gekapselt und bietet eine erweiterte API sowie die Elastic Transport Client-Schnittstelle und -Parameter. Bleiben Sie konsequent, der offiziell empfohlene es-Client.
Methode 4: Stellen Sie über den JestClient-Client eine Verbindung zum es-Server her. Dies ist ein von der Open-Source-Community entwickelter es-Client, der auf dem HTTP-Protokoll basiert. Der Beamte behauptet, dass die Schnittstelle und das Code-Design einfacher und vernünftiger sind Der offiziell von ES bereitgestellte Rest-Client ist einfacher zu verwenden und weist eine gewisse Kompatibilität mit ES-Serverversionen auf, die Aktualisierungsgeschwindigkeit ist jedoch nicht sehr hoch. Die aktuelle ES-Version wurde auf V7.9 veröffentlicht, JestClient unterstützt jedoch nur V1.0 bis V6 .X-Versionen von ES.
Es gibt noch eine weitere Sache, auf die jeder achten muss, und das ist die Kompatibilität der Versionsnummern!
Während des Entwicklungsprozesses muss jeder besonders auf die Versionsnummern des Clients und des Servers achten und diese so konsistent wie möglich halten. Beispielsweise lautet die Versionsnummer des Servers 6.8.2 und dann die Version Die Nummer des mit es verbundenen Clients sollte vorzugsweise gleich 6.8.2 sein. Auch wenn sie aus Projektgründen nicht konsistent sein kann, muss die Client-Versionsnummer zwischen 6.0.0 und 6.8.2 liegen und darf die Versionsnummer des Servers nicht überschreiten. Damit der Client den normalen Betrieb aufrechterhalten kann, treten sonst viele unerwartete Probleme auf. Wenn der Client die Version 7.0.4 hat, meldet das Programm zu diesem Zeitpunkt verschiedene Fehler und kann nicht einmal verwendet werden.
Warum machen Sie das? Der Hauptgrund ist, dass die höhere Version des ES-Servers nicht mit der niedrigeren Version von ES6 kompatibel ist. Sie unterscheidet sich stark von einigen API-Anforderungsparameterstrukturen von ES7, daher sollten die Client- und Server-Versionsnummern so weit wie möglich konsistent gehalten werden.
Kein Unsinn mehr, gehen wir direkt zum Code!
2. Code-Praxis
Die in diesem Artikel verwendete SpringBoot-Versionsnummer ist 2.1.0.RELEASE, die Versionsnummer des Servers ist 6.8.2 und die Client verwendet Die offiziell empfohlene Versionsnummer des Elastic Java High Level Rest Client ist 6.4.2, was bequem mit der SpringBoot-Version kompatibel ist.
2.1. Abhängigkeiten importieren
<!--elasticsearch--> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>6.4.2</version> </dependency> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-client</artifactId> <version>6.4.2</version> </dependency> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>6.4.2</version> </dependency>
2.2. Umgebungsvariablen konfigurieren
In der globalen Konfigurationsdatei application.properties konfigurieren Sie benutzerdefinierte Elasticsearch-Umgebungsvariablen.
elasticsearch.scheme=http elasticsearch.address=127.0.0.1:9200 elasticsearch.userName= elasticsearch.userPwd= elasticsearch.socketTimeout=5000 elasticsearch.connectTimeout=5000 elasticsearch.connectionRequestTimeout=5000
2.3. Erstellen Sie die Konfigurationsklasse von Elasticsearch
@Configuration public class ElasticsearchConfiguration { private static final Logger log = LoggerFactory.getLogger(ElasticsearchConfiguration.class); private static final int ADDRESS_LENGTH = 2; @Value("${elasticsearch.scheme:http}") private String scheme; @Value("${elasticsearch.address}") private String address; @Value("${elasticsearch.userName}") private String userName; @Value("${elasticsearch.userPwd}") private String userPwd; @Value("${elasticsearch.socketTimeout:5000}") private Integer socketTimeout; @Value("${elasticsearch.connectTimeout:5000}") private Integer connectTimeout; @Value("${elasticsearch.connectionRequestTimeout:5000}") private Integer connectionRequestTimeout; /** * 初始化客户端 * @return */ @Bean(name = "restHighLevelClient") public RestHighLevelClient restClientBuilder() { HttpHost[] hosts = Arrays.stream(address.split(",")) .map(this::buildHttpHost) .filter(Objects::nonNull) .toArray(HttpHost[]::new); RestClientBuilder restClientBuilder = RestClient.builder(hosts); // 异步参数配置 restClientBuilder.setHttpClientConfigCallback(httpClientBuilder -> { httpClientBuilder.setDefaultCredentialsProvider(buildCredentialsProvider()); return httpClientBuilder; }); // 异步连接延时配置 restClientBuilder.setRequestConfigCallback(requestConfigBuilder -> { requestConfigBuilder.setConnectionRequestTimeout(connectionRequestTimeout); requestConfigBuilder.setSocketTimeout(socketTimeout); requestConfigBuilder.setConnectTimeout(connectTimeout); return requestConfigBuilder; }); return new RestHighLevelClient(restClientBuilder); } /** * 根据配置创建HttpHost * @param s * @return */ private HttpHost buildHttpHost(String s) { String[] address = s.split(":"); if (address.length == ADDRESS_LENGTH) { String ip = address[0]; int port = Integer.parseInt(address[1]); return new HttpHost(ip, port, scheme); } else { return null; } } /** * 构建认证服务 * @return */ private CredentialsProvider buildCredentialsProvider(){ final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, userPwd)); return credentialsProvider; } }
Zu diesem Zeitpunkt ist die Client-Konfiguration abgeschlossen und wird beim Starten des Projekts automatisch in den IOC-Container von Spring eingefügt.
2.4. Indexverwaltung
es Das Wichtigste ist die Indexbibliothek. Wie wird sie auf der Clientseite erstellt?
Index erstellen
@RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = ElasticSearchApplication.class) public class IndexJunit { @Autowired private RestHighLevelClient client; /** * 创建索引(简单模式) * @throws IOException */ @Test public void createIndex() throws IOException { CreateIndexRequest request = new CreateIndexRequest("cs_index"); CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT); System.out.println(response.isAcknowledged()); } /** * 创建索引(复杂模式) * 可以直接把对应的文档结构也一并初始化 * @throws IOException */ @Test public void createIndexComplete() throws IOException { CreateIndexRequest request = new CreateIndexRequest(); //索引名称 request.index("cs_index"); //索引配置 Settings settings = Settings.builder() .put("index.number_of_shards", 3) .put("index.number_of_replicas", 1) .build(); request.settings(settings); //映射结构字段 Map<String, Object> properties = new HashMap(); properties.put("id", ImmutableBiMap.of("type", "text")); properties.put("name", ImmutableBiMap.of("type", "text")); properties.put("sex", ImmutableBiMap.of("type", "text")); properties.put("age", ImmutableBiMap.of("type", "long")); properties.put("city", ImmutableBiMap.of("type", "text")); properties.put("createTime", ImmutableBiMap.of("type", "long")); Map<String, Object> mapping = new HashMap<>(); mapping.put("properties", properties); //添加一个默认类型 System.out.println(JSON.toJSONString(request)); request.mapping("_doc",mapping); CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT); System.out.println(response.isAcknowledged()); } }
Index löschen
@RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = ElasticSearchApplication.class) public class IndexJunit { @Autowired private RestHighLevelClient client; /** * 删除索引 * @throws IOException */ @Test public void deleteIndex() throws IOException { DeleteIndexRequest request = new DeleteIndexRequest("cs_index1"); AcknowledgedResponse response = client.indices().delete(request, RequestOptions.DEFAULT); System.out.println(response.isAcknowledged()); } }
Index abfragen
@RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = ElasticSearchApplication.class) public class IndexJunit { @Autowired private RestHighLevelClient client; /** * 查询索引 * @throws IOException */ @Test public void getIndex() throws IOException { // 创建请求 GetIndexRequest request = new GetIndexRequest(); request.indices("cs_index"); // 执行请求,获取响应 GetIndexResponse response = client.indices().get(request, RequestOptions.DEFAULT); System.out.println(response.toString()); } }
Abfragen, ob Index vorhanden ist
@RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = ElasticSearchApplication.class) public class IndexJunit { @Autowired private RestHighLevelClient client; /** * 检查索引是否存在 * @throws IOException */ @Test public void exists() throws IOException { // 创建请求 GetIndexRequest request = new GetIndexRequest(); request.indices("cs_index"); // 执行请求,获取响应 boolean response = client.indices().exists(request, RequestOptions.DEFAULT); System.out.println(response); } }
Alle Indexnamen abfragen
@RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = ElasticSearchApplication.class) public class IndexJunit { @Autowired private RestHighLevelClient client; /** * 查询所有的索引名称 * @throws IOException */ @Test public void getAllIndices() throws IOException { GetAliasesRequest request = new GetAliasesRequest(); GetAliasesResponse response = client.indices().getAlias(request,RequestOptions.DEFAULT); Map<String, Set<AliasMetaData>> map = response.getAliases(); Set<String> indices = map.keySet(); for (String key : indices) { System.out.println(key); } } }
Abfrageindex-Zuordnungsfeld
@RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = ElasticSearchApplication.class) public class IndexJunit { @Autowired private RestHighLevelClient client; /** * 查询索引映射字段 * @throws IOException */ @Test public void getMapping() throws IOException { GetMappingsRequest request = new GetMappingsRequest(); request.indices("cs_index"); request.types("_doc"); GetMappingsResponse response = client.indices().getMapping(request, RequestOptions.DEFAULT); System.out.println(response.toString()); } }
Indexzuordnungsfeld hinzufügen
@RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = ElasticSearchApplication.class) public class IndexJunit { @Autowired private RestHighLevelClient client; /** * 添加索引映射字段 * @throws IOException */ @Test public void addMapping() throws IOException { PutMappingRequest request = new PutMappingRequest(); request.indices("cs_index"); request.type("_doc"); //添加字段 Map<String, Object> properties = new HashMap(); properties.put("accountName", ImmutableBiMap.of("type", "keyword")); Map<String, Object> mapping = new HashMap<>(); mapping.put("properties", properties); request.source(mapping); PutMappingResponse response = client.indices().putMapping(request, RequestOptions.DEFAULT); System.out.println(response.isAcknowledged()); } }
2.5. Das sogenannte Dokument dient zum Hinzufügen von Daten zum Index, um die Datenabfrage zu erleichtern. Weitere Informationen finden Sie unten.
Dokument hinzufügenrrree
Fügen Sie Dokumente stapelweise hinzu Das obige ist der detaillierte Inhalt vonWie SpringBoot+Elasticsearch die Datensuche implementiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!ublic class UserDocument {
private String id;
private String name;
private String sex;
private Integer age;
private String city;
private Date createTime;
//省略get、set...
}

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



SpringBoot und SpringMVC sind beide häufig verwendete Frameworks in der Java-Entwicklung, es gibt jedoch einige offensichtliche Unterschiede zwischen ihnen. In diesem Artikel werden die Funktionen und Verwendungsmöglichkeiten dieser beiden Frameworks untersucht und ihre Unterschiede verglichen. Lassen Sie uns zunächst etwas über SpringBoot lernen. SpringBoot wurde vom Pivotal-Team entwickelt, um die Erstellung und Bereitstellung von Anwendungen auf Basis des Spring-Frameworks zu vereinfachen. Es bietet eine schnelle und einfache Möglichkeit, eigenständige, ausführbare Dateien zu erstellen

In diesem Artikel wird ein detailliertes Beispiel geschrieben, um über die tatsächliche Entwicklung von Dubbo + Nacos + Spring Boot zu sprechen. In diesem Artikel wird nicht zu viel theoretisches Wissen behandelt, sondern das einfachste Beispiel wird geschrieben, um zu veranschaulichen, wie Dubbo in Nacos integriert werden kann, um schnell eine Entwicklungsumgebung aufzubauen.

PHPElasticsearch: Wie nutzt man dynamisches Mapping, um flexible Suchfunktionen zu erreichen? Einleitung: Suchfunktionen sind ein wesentlicher Bestandteil der Entwicklung moderner Anwendungen. Elasticsearch ist eine leistungsstarke Such- und Analysemaschine, die umfassende Funktionalität und flexible Datenmodellierung bietet. In diesem Artikel konzentrieren wir uns auf die Verwendung dynamischer Zuordnungen, um flexible Suchfunktionen zu erreichen. 1. Einführung in die dynamische Zuordnung In Elasticsearch ist die Zuordnung (mapp

Was ist der Unterschied zwischen SpringBoot und SpringMVC? SpringBoot und SpringMVC sind zwei sehr beliebte Java-Entwicklungsframeworks zum Erstellen von Webanwendungen. Obwohl sie häufig separat verwendet werden, sind die Unterschiede zwischen ihnen offensichtlich. Zunächst einmal kann SpringBoot als Erweiterung oder erweiterte Version des Spring-Frameworks betrachtet werden. Es soll den Initialisierungs- und Konfigurationsprozess von Spring-Anwendungen vereinfachen und Entwicklern helfen

Eingehende Untersuchung der Elasticsearch-Abfragesyntax und praktische Einführung: Elasticsearch ist eine auf Lucene basierende Open-Source-Suchmaschine. Sie wird hauptsächlich für die verteilte Suche und Analyse verwendet. Sie wird häufig bei der Volltextsuche großer Datenmengen und bei der Protokollanalyse verwendet , Empfehlungssysteme und andere Szenarien. Bei der Verwendung von Elasticsearch für Datenabfragen ist die flexible Verwendung der Abfragesyntax der Schlüssel zur Verbesserung der Abfrageeffizienz. Dieser Artikel befasst sich mit der Elasticsearch-Abfragesyntax und stellt sie anhand tatsächlicher Fälle dar.

So verwenden Sie PHP und Elasticsearch, um hervorgehobene Suchergebnisse zu erzielen. Einführung: In der modernen Internetwelt sind Suchmaschinen zum wichtigsten Weg für Menschen geworden, Informationen zu erhalten. Um die Lesbarkeit und Benutzererfahrung von Suchergebnissen zu verbessern, ist die Hervorhebung von Suchbegriffen zu einer häufigen Anforderung geworden. In diesem Artikel wird erläutert, wie Sie mithilfe von PHP und Elasticsearch hervorgehobene Suchergebnisse erzielen. 1. Vorbereitung Bevor wir beginnen, müssen wir sicherstellen, dass PHP und Elasticsearch korrekt installiert und konfiguriert wurden.

Zusammenfassung der Protokollanalyse und Ausnahmeüberwachung basierend auf Elasticsearch in PHP: In diesem Artikel wird erläutert, wie Sie die Elasticsearch-Datenbank für die Protokollanalyse und Ausnahmeüberwachung verwenden. Anhand prägnanter PHP-Codebeispiele wird gezeigt, wie Sie eine Verbindung zur Elasticsearch-Datenbank herstellen, Protokolldaten in die Datenbank schreiben und die leistungsstarke Abfragefunktion von Elasticsearch verwenden, um Anomalien in den Protokollen zu analysieren und zu überwachen. Einführung: Protokollanalyse und Ausnahmeüberwachung sind

Der Unterschied zwischen Spring und Springboot: 1. Konfiguration 3. Abhängigkeitsmanagement 6. Integration und Skalierbarkeit; Ausführliche Einführung: 1. Designziele: Spring ist ein umfassendes Framework, das eine Vielzahl von Funktionen für alle Aspekte der Unternehmensanwendungsentwicklung bietet, einschließlich Abhängigkeitsinjektion, Transaktionsverwaltung, Sicherheit usw. 2. Konfiguration, Spring Eine große Menge Zur Erledigung verschiedener Aufgaben ist eine XML- oder Java-Konfiguration erforderlich, was zweifellos die Entwicklungszeit usw. verlängert.
