Mit Elasticsearch können Sie die Java-API verwenden.
Offizielles Dokument der Elasticsearch Java API
Dies ist recht praktisch, aber es scheint, dass nicht viele Informationen verfügbar sind, also habe ich es zusammengefasst.
Der in diesem Artikel verwendete `` `TransportClient``` ist ab der nächsten Hauptversion 7 veraltet und wird in 8 entfernt. Daher wird empfohlen, auf "High Level REST Client" zu migrieren. Weitere Informationen finden Sie im Kommentarbereich. Vielen Dank für den Hinweis, Johtani.
Ich würde es gerne mit einem solchen Bild machen.
Im Fall von RDB werden Zweigstelleninformationen und Buchtitelinformationen in separaten TBLs gespeichert, und Verkaufs-TBLs werden erstellt und verbunden. Im Fall von ELS handelt es sich jedoch um Daten für jede Zeile. Registrieren Sie mehrere Datensätze. Ich bin der Meinung, dass ELS-Aufzeichnungen einfach zu erstellen sind, wenn Sie ein ansichtsähnliches Bild haben.
Ist die Rate (Gewichtung) für diesen Datensatz charakteristisch? In der Rangliste ist der 1. Platz normalerweise der höchste und die Rangliste sinkt mit zunehmender Anzahl. Wenn Sie jedoch versuchen, diese Rangfolge auf der Y-Achse des Faltliniendiagramms anzuzeigen, müssen Sie den Wert anzeigen, wenn der Wert auf der Y-Achse steigt. Dies ist das Gegenteil des üblichen Werts, der mit ELS schwer auszudrücken ist. ist. Referenz (oder besser gesagt meine frühere Frage): Ranglistenanzeige in einem Diagramm mit unterbrochenen Linien
Daher ist die Rate das Ergebnis der Konvertierung des Rangfolgenwerts in Form einer Gewichtung, sodass das Diagramm leicht angezeigt werden kann.
Methode zur Berechnung der Rate:(Gesamtrangliste) - (Eigener Rangwert) + 1
Wenn sich die Gesamtzahl der Ranglisten bewegt, ändert sich die Grafikanzeige auf 100 oder 1000 und es wird immer ein fester Wert verwendet.
Verwenden Sie eine beliebige Methode, um einen JSON zu erstellen, der in ELS importiert werden kann.
JSON
branch title author genre ranking rate execDate
Shinjuku Titel Ein Autor Ahn Comic-girl 1 3 2018/01/11T13:00:00+09:00
Shinjuku Titel B Autor und später Comic-male 2 2 2018/01/11T13:00:00+09:00
Shinjuku Titel C Autor U Comic-girl 3 1 2018/01/11T13:00:00+09:00
Marunouchi Titel C Autor U Comic-girl 1 3 2018/01/11T13:00:00+09:00
Marunouchi Titel Ein Autor Ahn Comic-girl 2 2 2018/01/11T13:00:00+09:00
Marunouchi Titel D Comic des Autors-boy 3 1 2018/01/11T13:00:00+09:00
Shinagawa Titel B Autor und später Comic-male 1 3 2018/01/11T13:00:00+09:00
Shinagawa Titel C Autor U Comic-girl 2 2 2018/01/11T13:00:00+09:00
Shinagawa Title E Autor bei Comic-femail 3 1 2018/01/11T13:00:00+09:00
ranking.json
[{"branch":"Shinjuku","title":"Titel A.","author":"Autor Ahn","genre":"comic-girl","ranking":1,"rate":3,"execDate":"2018/01/11T13:00:00+09:00"},{"branch":"Shinjuku","title":"Titel B.","author":"Vom Autor","genre":"comic-male","ranking":2,"rate":2,"execDate":"2018/01/11T13:00:00+09:00"},{"branch":"Shinjuku","title":"Titel C.","author":"Autor U.","genre":"comic-girl","ranking":3,"rate":1,"execDate":"2018/01/11T13:00:00+09:00"},{"branch":"Marunouchi","title":"Titel C.","author":"Autor U.","genre":"comic-girl","ranking":1,"rate":3,"execDate":"2018/01/11T13:00:00+09:00"},{"branch":"Marunouchi","title":"Titel A.","author":"Autor Ahn","genre":"comic-girl","ranking":2,"rate":2,"execDate":"2018/01/11T13:00:00+09:00"},{"branch":"Marunouchi","title":"Titel D.","author":"Autor Kleidung","genre":"comic-boy","ranking":3,"rate":1,"execDate":"2018/01/11T13:00:00+09:00"},{"branch":"Shinagawa","title":"Titel B.","author":"Vom Autor","genre":"comic-male","ranking":1,"rate":3,"execDate":"2018/01/11T13:00:00+09:00"},{"branch":"Shinagawa","title":"Titel C.","author":"Autor U.","genre":"comic-girl","ranking":2,"rate":2,"execDate":"2018/01/11T13:00:00+09:00"},{"branch":"Shinagawa","title":"Titel E.","author":"Beim Autor","genre":"comic-femail","ranking":3,"rate":1,"execDate":"2018/01/11T13:00:00+09:00"}]
Bean
Wir werden auch eine entsprechende Rangliste erstellen.
RankingDataBean.java
public class RankingDataBean extends ElsDataBaseBean {
//Zweigname
private String branch;
//Buchtitel
private String title;
//Autorenname
private String author;
//Genre
private String genre;
//Rangfolge
private int ranking;
//Bewertung
private int rate;
//Registrierungsdatum
private Date execDate;
(Abkürzung)
}
Die Funktion hier ist, dass es von ElsDataBaseBean erbt. Der Inhalt ist so.
ElsDataBaseBean.java
public class ElsDataBaseBean {
//Index
private String index;
(Abkürzung)
}
Ich habe nur den Index selbst. Wir werden einen Importer erstellen, damit jede Bean, die diese Bean erbt, registriert werden kann.
ElsImporter.java
/**
*Importieren Sie Daten mit Bulk in ELS
*/
public class ElsImporter<T extends ElsDataBaseBean> {
private static Logger logger = LoggerFactory.getLogger(ElsImporter.class);
//Indexformat für Jahr / Monat(yyyyMM)
private static DateTimeFormatter YM_INDEX_FORMATTER;
//Verschiedene Einstellungsinformationen
SettingBaseBean setting;
//Zu importierende Datenklasse
Class<T> clazz;
/**
*Konstrukteur
* @Parametereinstellung Verschiedene Einstellungsinformationen
* @param clazz Zu importierende Datenklasse
*/
public ElsImporter(SettingBaseBean setting, Class<T> clazz) {
this.setting = setting;
this.clazz = clazz;
YM_INDEX_FORMATTER = DateTimeFormatter.ofPattern(setting.getElasticearch().getIndexYmFormat());
}
/**
*Import durchführen
*/
public boolean execute() throws Exception {
logger.info("ElsImporter-Importvorgang gestartet-----------------------------------------");
//Erstellen Sie einen Client für ELS in Java
// setting.getElasticearch().getAddress():IP Adresse
// setting.getElasticearch().getPort():Port-Nummer(Normalerweise 9300)
TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(
setting.getElasticearch().getAddress()), setting.getElasticearch().getPort()));
//Massenvorbereitung
BulkRequestBuilder bulkRequest = client.prepareBulk();
//Gson Vorbereitung
// setting.getElasticearch().getExecDateFormat():
//Registrierungsdatum Format(yyyy/MM/dd'T'HH:mm:ss+09:00)
Gson gson = new GsonBuilder().setDateFormat(setting.getElasticearch().getExecDateFormat()).create();
//Richten Sie alle Dateien in dem Verzeichnis aus, das JSON enthält
File dir = new File(setting.getRootDir(), setting.getSubDir().getJsonDir());
for (File file : dir.listFiles()) {
logger.debug("■■ Import: "+ file.getName());
//Konvertieren Sie JSON-Daten in eine Liste
List<T> list = gson.fromJson(FileUtils.readFileToString(file, "UTF-8"), new ListOfSomething<T>(clazz));
//Holen Sie sich Ranking-Informationen nacheinander und fügen Sie sie der Masse hinzu
for (T data : list) {
//Registrierungszielindex
// setting.getElasticearch().getIndex():ELS-Index(allgemeiner Teil)
// setting.getNow():LocalDateTime zum Zeitpunkt der Ausführung der Verarbeitung
//Beispiel 1: setting.getElasticearch().getIndex() : ranking
// data.getIndex() : comic-girl
// setting.getNow() : 2018/01/18 12:00:00
//Index generieren: ranking-comic-girl-201801
//Beispiel 2: setting.getElasticearch().getIndex() : ranking
// data.getIndex() : null
// setting.getNow() : 2018/01/18 12:00:00
//Index generieren: ranking-201801
String index;
if (StringUtils.isEmpty(data.getIndex())) {
//Nicht subindizierte Version
index = setting.getElasticearch().getIndex()
+ "-" + YM_INDEX_FORMATTER.format(setting.getNow());
}
else {
//Subindizierte Version
index = setting.getElasticearch().getIndex()
+ "-" + data.getIndex()
+ "-" + YM_INDEX_FORMATTER.format(setting.getNow());
}
//Hinzufügen von Daten im JSON-Format zu Bulk
// setting.getElasticearch().getType():ELS-Typ
bulkRequest.add(client.prepareIndex(index
, setting.getElasticearch().getType())
.setSource(gson.toJson(data), XContentType.JSON));
}
}
//Massenausführung
BulkResponse bulkResponse = bulkRequest.execute().get();
//Schlägt Bulk aus?(True wenn fehlgeschlagen)
if (bulkResponse.hasFailures()) {
logger.error("ElsImporter-Bulk fehlgeschlagen");
//Beenden Sie den Client
client.close();
return false;
}
logger.info("ElsImporter-Importvorgang abgeschlossen-----------------------------------------");
//Beenden Sie den Client
client.close();
return true;
}
/**
*Konvertieren Sie Objekte in der Liste mit Gson in den angegebenen Typ
*/
class ListOfSomething<X> implements ParameterizedType {
private Class<?> wrapped;
public ListOfSomething(Class<X> wrapped) {
this.wrapped = wrapped;
}
public Type[] getActualTypeArguments() {
return new Type[] {wrapped};
}
public Type getRawType() {
return List.class;
}
public Type getOwnerType() {
return null;
}
}
}
Referenz: Java Type Generic als Argument für GSON
Die zu importierenden Datenklasseninformationen selbst werden nicht im Importer gespeichert.
Da es nur generischen Informationen und Klasseninformationen entspricht, kann es auf andere als diese Ranginformationen umgeleitet werden.
elsdatabasebean
Hatte inindex
Wirkt wie ein Subindex.
kibana
Anzeigen mitjava-api
Ich denke, dass es gut ist, es entsprechend der in erworbenen Granularität zu geben.
Die Standard-Granularität des ELS-Index ist logstash. Es ist jedoch eine gute Idee, dies auch zu berücksichtigen, je nachdem, wie lange Sie es häufig versuchen.
exec.java
ElsImporter<RankingDataBean> importer
= new ElsImporter<RankingDataBean>(setting, RankingDataBean.class);
boolean result = importer.execute();
Der Anruf wird auf diese Weise getätigt.
rankingdatabean
Es ist ein bisschen seltsam, 3 Plätze aufzulisten, aber ich habe aufgegeben, weil es gson unterstützt.
Ich habe mein Bestes getan, um den Importprozess für Massenanfragen so vielseitig wie möglich zu gestalten. Ab dem nächsten Mal möchte ich mich mit diesen registrierten Daten befassen.