Yazar | mr_xinchen
Kaynak | CSDN Blogu
Üretildi | CSDN (ID: CSDNnews)
Elasticsearch'e Giriş
Elasticsearch, Lucene tabanlı dağıtılmış bir tam metin arama sunucusudur. Baidu Library tarafından verilen açıklamaya bakalım.
kullanım : Arama işlevi yap Kullanım Durumları : GitHub, Wikipedia vb. Solr karşılaştırması:
Gerçek zamanlı ES, Solr'den daha yüksektir
Solr geleneksel arama performansı ES'den daha yüksektir
Elasticsearch kurulumu
Not: Kurulum, java1.8'in üzerinde bir Windows ortamında olmalıdır.
Sıkıştırılmış bir paketi indirmek ve almak için resmi web sitesine gidin, sürüm 6.2.4
Zip dosyasını açın ve bin klasörünü bulmak için dizini girin
Elasticsearch.bat komut dosyasını bin klasöründe çalıştırmak için çift tıklayın
Tarayıcıya http: // localhost: 9200 / girin
Tarayıcı, kurulumun başarılı olduğunu gösteriyor
Linux ortamı
1. Kurulum ve yapılandırma
Elasticsearch'ü linux altında 6.2.4 sürümünü kullanarak kuracağız.
2. Yeni bir kullanıcı oluşturun
Güvenlik nedenleriyle, elasticsearch'ün varsayılan olarak root olarak çalışmasına izin verilmez.
Kullanıcı oluştur:
1kullanıcıadd kullanıcı adı
şifreyi belirle:
1passwd kullanıcı adıKullanıcı değiştir:
1su kullanıcı adı
3. Kurulum paketini yükleyin ve sıkıştırmayı açın
Kurulum paketini / home / username dizinine yüklüyoruz
unzip:
1tar -zxvf elasticsearch-6.2.4.tar.gz
Dizini yeniden adlandırıyoruz:
1mv elasticsearch-6.2.4 / elasticsearch
Dizin yapısını girin ve görüntüleyin:
1ls -l / ev / kullanıcı adı / elasticsearch
4. Yapılandırmayı değiştirin
Config dizinine giriyoruz: cd config
Değiştirilmesi gereken iki yapılandırma dosyası vardır:
jvm.options
Elasticsearch, Lucene'ye dayanmaktadır ve Lucene'nin alt katmanı Java'da uygulanmaktadır, bu nedenle jvm parametrelerini yapılandırmamız gerekir.
Jvm.options'ı düzenleyin:
1vim jvm.options
Varsayılan yapılandırma aşağıdaki gibidir:
1-Xms1g 2-Xmx1gHafıza çok fazla kaplıyor, hadi azaltalım:
1-Xms512m 2-Xmx512melasticsearch.yml
1vim elasticsearch.yml
Verileri ve günlük dizinini değiştirin:
Veri ve günlük dizinlerini elasticsearch kurulum dizinine işaret edecek şekilde değiştirdik. Ancak bu iki dizin mevcut değil, bu yüzden onları oluşturmamız gerekiyor.
Elasticsearch'ün kök dizinine gidin ve oluşturun:
1mkdir verileri 2mkdir günlükleriBağlı ip'i değiştirin:
1network.host: 0.0.0.0 # 0.0.0.0'a bağlayarak tüm iplerin erişmesine izin verir
Varsayılan olarak, yalnızca yerel erişime izin verilir, 0.0.0.0'a değiştirildikten sonra uzaktan erişim mümkündür
Şu anda bağımsız bir kurulum yapıyoruz.Bir küme yapmak istiyorsanız, yalnızca bu yapılandırma dosyasına diğer düğüm bilgilerini eklemeniz gerekir.
Elasticsearch.yml'nin diğer yapılandırılabilir bilgileri:
5. Çalıştır
Elasticsearch / bin dizinine girin, aşağıdaki çalıştırılabilir dosyaları görebilirsiniz:
Ardından komutu girin:
1./elasticsearch
Bir hata bulundu, başlatılamadı:
Hata 1: Çekirdek çok düşük
Biz centos6 kullanıyoruz ve linux kernel versiyonu 2.6. Elasticsearch eklentisi en az sürüm 3.5 gerektirir. Ama önemli değil, bu eklentiyi devre dışı bırakabiliriz.
Elasticsearch.yml dosyasını değiştirin ve aşağıdaki yapılandırmayı en alta ekleyin:
1bootstrap.system_call_filter: yanlış
Sonra yeniden başlat
Hata 2: Yetersiz dosya izinleri
Tekrar başladı, başka bir hata oluştu:
1: elasticsearch süreci için maksimum dosya tanımlayıcıları muhtemelen çok düşük, en azından artırın
Kök yerine normal bir kullanıcı kullanıyoruz, bu nedenle dosya izinleri yetersiz.
Önce kök kullanıcı olarak oturum açın.
Ardından yapılandırma dosyasını değiştirin:
1vim /etc/security/limits.conf
Aşağıdaki içeriği ekleyin:
1 * yumuşak nofile 655362 3 * sert nofile 1310724 5 * yumuşak nproc 40966 7 * sert nproc 4096Hata 3: Yeterli konu yok
Hata raporunda başka bir satır var:
1: kullanıcı için maksimum iş parçacığı sayısı çok düşük, en azından artırın
Bunun nedeni, iş parçacığı sayısının yeterli olmamasıdır.
Yapılandırmayı değiştirmeye devam edin:
1vim /etc/security/limits.d/90-nproc.confAşağıdaki içeriği değiştirin:
1 * yumuşak nproc 1024
Kime:
1 * yumuşak nproc 4096
Hata 4: Sanal belleği işleyin
1: maksimum sanal bellek alanı vm.max_map_count muhtemelen çok düşük, en azından artırın
vm.max_map_count: Bir işlemin sahip olabileceği VMA (sanal bellek alanı) sayısını sınırlayın, yapılandırma dosyasını değiştirmeye devam edin ,:
1vim /etc/sysctl.conf
Aşağıdaki içeriği ekleyin:
1vm.max_map_count = 655360
Ardından şu komutu yürütün:
1sysctl -p
6. Terminal penceresini yeniden başlatın
Tüm hatalar düzeltildikten sonra, Xshell terminalinizi yeniden başlatmalısınız, aksi takdirde yapılandırma geçersiz olacaktır.
7. Başla
Elasticsearch / bin dizinine gidin ve şu komutu girin:
1./elasticsearch
İki bağlantı noktasının bağlı olduğunu görebilirsiniz:
9300: Küme düğümleri arasındaki iletişim arabirimi
9200: İstemci erişim arayüzü
Tarayıcıda ziyaret ediyoruz:
Elasticsearch teorik bilgisi
Son Lucene makalemi okuduktan sonra, herkes Lucene'yi geleneksel veri tabanlarıyla karşılaştırdığımı biliyor. Aslında, pek çok benzerlikleri var.Şimdi Elasticsearch'ü Mysql ile karşılaştıralım.
1Mysql- > veri tabanı- > masa- > satırlar- > sütunlar 23Elastikarama- > indeks- > tip- > belgeler- > alanlar1. dizin
Bir veritabanına benzer olabilir, ancak fark, biraz benzer özelliklere sahip bir belge koleksiyonudur.Örneğin, bir ürün veri dizini veya müşteri veri dizinine sahip olabilirsiniz.
2. tür
Benzer şekilde, belgeleri sınıflandırmak için kullanılan bir tablo olarak kabul edilebilir.Genellikle, bir dizi ortak alana sahip belgeler için bir tür tanımlanır.
3. belgeler
Benzer şekilde bir tablodaki sonraki veri satırı olarak kabul edilebilir.Bir belge, indekslenebilen temel bir bilgi birimidir.
4. alanlar (lucene'de alan adı verilen alanlar)
Belge verilerini farklı özniteliklere göre sınıflandırmak ve tanımlamak için benzer şekilde bir tablo alanı olarak kabul edilebilir.
5. haritalama
Benzer şekilde alanın veri türü ve kısıtlamaları olarak da kabul edilebilir. Haritalama, bir alanın veri türü, varsayılan değer, analizör, dizine eklenip eklenmeyeceği gibi verilerin işlenme şekli ve kuralları üzerinde bazı kısıtlamalar getirmektir.
6. parça kopyaları (parça yedeklemesi)
ES, belge verilerini parçalara ayıran ve birden çok parçayı birlikte eksiksiz bir veri oluşturan, dağıtılmış, büyük veri hacimli bir tam metin arama sunucusudur. Dağıtılmış bir ortamda, tek bir hata noktasının ortaya çıkması çok muhtemeldir. Şu anda, yedeklenmesi gereken her bir bölüm eşzamanlı olarak kopyalanacak ve aktarılacaktır.
RESTfull sözdizimi
Burada kibana kullanıyorum veya başka araçlar da kullanabilirsiniz
1. Dizin ve eşleme oluşturun
1PUT / dizin adı 23 { 45 "eşleme": { 67 "tür adı": { 89 "özellik": { 1011 "alan adı": { 1213 "type": "Tür", 1415 "mağaza": saklanıp saklanmayacağı, 1617 "indeks": indekslenip indekslenmeyeceği 1819 "analizci": "kelime ayırıcı" 20 yirmi bir }, yirmi iki 23 "alan adı": { yirmi dört 25 "type": "metin", 2627 "mağaza": doğru, 2829 "dizin": doğru, 3031 "analizör": "standart" 3233} 3435} 3637} 3839} 4041}2. Dizini oluşturduktan sonra eşleme ekleyin
1POST / dizin adı / tür adı / _mapping 23 { 45 "tür adı": { 67 "özellik": { 89 "alan adı": { 1011 "type": "long", 1213 "mağaza": doğru, 1415 "indeks": yanlış 1617}, 1819 "alan adı": { 2021 "type": "metin", yirmi iki 23 "mağaza": doğru, yirmi dört 25 "dizin": doğru, 2627 "analizör": "standart" 2829} 3031} 3233} 3435}3. Dizin dizinini silin
1DELETE / dizin adı
4. Belge belgesi ekleyin
1POST / dizin adı / tür adı / 23 { 45 "FIELD": "VALUE", 67 "FIELD": "VALUE", 89 "FIELD": "VALUE" 1011}5. Belgeyi değiştir
1, eklemeyle aynıdır ve _id var6. Belge belgesini silin
1DELETE / dizin adı / tür adı / _id
7. _id ile sorgu
1GET / dizin adı / tür adı / _id
8. Terime göre sorgulama
1POST / dizin adı / tür adı / _search 23 { 45 "sorgu": { 67 "terim": { 89 "FIELD": "VALUE" 1011} 1213} 1415}9. query_string'e göre sorgulama
1POST / dizin adı / tür adı / _search 23 { 45 "sorgu": { 67 "sorgu_dizesi": { 89 "default_field": "FIELD", 1011 "sorgu": "bu VE bu VEYA böyle" 1213} 1415} 1617}IK belirteç
Kelime segmentasyon etkisini görüntüleyin
1GET / _analyze 23 { 45 "analizör": "standart", 67 "metin": "VALUE" 89}Entegre IK belirteç oluşturucu
Sıkıştırılmış IK tokenizer paketini indirin ve açın
Elasticsearch klasörünü ik-analyzer olarak yeniden adlandırın
İk-analyzer klasörünü elasticsearch dizininin eklentiler klasörüne yerleştirin
Elasticsearch sunucusunu yeniden başlatın
Kelime segmenterinin etkisini test etmek için analizörün değerini ik_smart veya ik_max_word olarak değiştirin
Elasticsearch kümesi
Buradaki ES kümesi oldukça basit, Solr gibi bir kayda ihtiyaç duymuyor. Aslında, herkes bilir ki, dağıtılmış çocuk ayakkabılarını oynadıktan sonra, küme oynamak, birkaç örnek daha açıp bunları bir veya daha fazla kayıtla yönetmekten başka bir şey değildir. ES küme modu, basitçe bir yayın dağıtılmış sistem olan P2P tipi (dedikodu protokolü kullanan) dağıtılmış bir sistem kullanır. Dolayısıyla yapılandırma, teslim alma kayıt defterinden daha basittir.
1. küme
Bir küme, tüm verileri bir arada tutan ve dizin ve arama işlevlerini bir arada sağlayan bir veya daha fazla düğüm tarafından organize edilir. Bir küme, varsayılan olarak "elasticsearch" olan benzersiz bir adla tanımlanır. Bu ad önemlidir çünkü bir düğüm bu kümeye yalnızca belirli bir kümenin adını belirterek katılabilir.
2. düğüm (düğüm)
Kümelenmiş bir sunucudur
3. parça kopyaları (parça yedeklemesi)
Birden çok ES sunucusu hazırlayın ve elasticsearch-cluster \ config \ elasticsearch.yml yapılandırma dosyasını değiştirin
1 # Düğümün yapılandırma bilgileri: 23 # Küme adı, benzersiz olması garantili 45cluster.name: elasticsearch 67 # Düğüm adı, farklı olmalıdır 89node.name: düğüm-11011 # Bu makinenin ip adresi olmalı 1213network.host: 127.0.0.11415 # Servis bağlantı noktası numarası, aynı makinede farklı olmalıdır 1617http.port: 92001819 # Kümeler arası iletişim bağlantı noktası numarası, aynı makinede farklı olmalıdır 2021transport.tcp.port: 9300 yirmi iki 23 # Kümeyi, makine IP koleksiyonunu otomatik olarak bulacak şekilde ayarlayın yirmi dört 25discovery.zen.ping.unicast.hosts:JAVA istemcisi
7.1 Maven projesi oluşturun ve koordinatları içe aktarın
1 < bağımlılıklar > 23 < bağımlılık > 45 < Grup kimliği > org.elasticsearch < /Grup kimliği > 67 < artifactId > elasticsearch < / artifactId > 89 < versiyon > 5.6.10 < / version > 1011 < /bağımlılık > 1213 < bağımlılık > 1415 < Grup kimliği > org.elasticsearch.client < /Grup kimliği > 1617 < artifactId > Ulaşım < / artifactId > 1819 < versiyon > 5.6.10 < / version > 20 yirmi bir < /bağımlılık > yirmi iki yirmi üç < bağımlılık > yirmi dört 25 < Grup kimliği > org.apache.logging.log4j < /Grup kimliği > 2627 < artifactId > log4j-slf4j arası < / artifactId > 2829 < versiyon > 2.9.1 < / version > 3031 < /bağımlılık > 3233 < bağımlılık > 3435 < Grup kimliği > org.slf4j < /Grup kimliği > 3637 < artifactId > slf4j-api < / artifactId > 3839 < versiyon > 1.7.24 < / version > 4041 < /bağımlılık > 4243 < bağımlılık > 4445 < Grup kimliği > org.slf4j < /Grup kimliği > 4647 < artifactId > slf4j-basit < / artifactId > 4849 < versiyon > 1.7.21 < / version > 5051 < /bağımlılık > 5253 < bağımlılık > 5455 < Grup kimliği > log4j < /Grup kimliği > 5657 < artifactId > log4j < / artifactId > 5859 < versiyon > 1.2.12 < / version > 6061 < /bağımlılık > 6263 < bağımlılık > 6465 < Grup kimliği > Junit < /Grup kimliği > 6667 < artifactId > Junit < / artifactId > 6869 < versiyon > 4.12 < / version > 7071 < /bağımlılık > 7273 < / bağımlılıklar >7.2 Bir dizin kitaplığı oluşturun
1public class ElasticsearchClient { 23 @Test 45 public void createIndex Exception { 67 // Bir ayarlar nesnesi oluşturun 89 Ayarlar ayarları = Settings.builder 1011.put ("küme.adı", "elasticsearch") 1213. yapı; 1415 // İstemci nesnesi oluştur 1617 TransportClient istemcisi = new PreBuiltTransportClient (ayarlar); 1819 client.addTransportAddress (yeni InetSocketTransportAddress (InetAddress.getByName ("127.0.0.1"), 9300)); 2021 // İndeks kitaplığı oluştur yirmi iki 23 client.admin.indices.prepareCreate ("index_hello"). Get; yirmi dört 25 // Kaynakları kapatın 2627 müşteri.close; 2829} 3031}7.3 Eşleştirmeyi ayarlama
1public class ElasticsearchClient { 23 @Test 45 public void setMapping istisna {{ 67 // Bir ayarlar nesnesi oluşturun 89 Ayarlar ayarları = Settings.builder 1011.put ("küme.adı", "elasticsearch") 1213. yapı; 1415 // İstemci nesnesi oluştur 1617 TransportClient istemcisi = new PreBuiltTransportClient (ayarlar); 1819 client.addTransportAddress (yeni InetSocketTransportAddress (InetAddress.getByName ("127.0.0.1"), 9300)); 2021 // Eşleme Derleme, RESTfull istek gövdesi yirmi iki 23 XContentBuilder oluşturucu = XContentFactory.jsonBuilder yirmi dört 25 .startObject 2627 .startObject ("makale") 2829 .startObject ("özellikler") 3031 .startObject ("id") 3233 .field ("tür", "uzun") 3435 .field ("mağaza", doğru) 3637 .endObject 3839 .startObject ("başlık") 4041 .field ("tür", "metin") 4243 .field ("mağaza", doğru) 4445 .field ("analizör", "ik_smart") 4647 .endObject 4849 .startObject ("içerik") 5051 .field ("tür", "metin") 5253 .field ("mağaza", doğru) 5455 .field ("analizör", "ik_smart") 5657 .endObject 5859. EndObject 6061. EndObject 6263 .endObject; 6465 // Eşlemeyi dizin kitaplığına ayarlamak için istemciyi kullanın 6667 client.admin.indices 6869 .preparePutMapping ("index_hello") 7071 .setType ("makale") 7273 .setSource (oluşturucu) 7475 .get; 7677 // Kaynakları kapat 7879 müşteri.close; 8081} 8283}7.4 Belge ekle
1public class ElasticsearchClient { 23 @Test 45 genel void addDocument İstisna { 67 // Bir ayarlar nesnesi oluşturun 89 Ayarlar ayarları = Settings.builder 1011.put ("küme.adı", "elasticsearch") 1213. yapı; 1415 // İstemci nesnesi oluştur 1617 TransportClient istemcisi = new PreBuiltTransportClient (ayarlar); 1819 client.addTransportAddress (yeni InetSocketTransportAddress (InetAddress.getByName ("127.0.0.1"), 9300)); 2021 XContentBuilder oluşturucu = XContentFactory.jsonBuilder yirmi iki 23 .startObject yirmi dört 25 .field ("id", 1L) 2627 .field ("başlık", "Ticaret Bakanlığı: İş ve ticaret girişimlerini işe ve üretime devam ettirmek için düzenli ve zorla organize edin") 2829 .field ("içerik", "Xinhua Haber Ajansı, Pekin, 23 Şubat (Muhabirler Chen Weiwei, Wang Yuxiao) Muhabirler 23'ünde Ticaret Bakanlığından" Günlük İhtiyaçların Arzı ve Garantisi Koordinasyon Bildirimi "yayınladığını öğrendiler. ", yerel ticari makamların, salgının önlenmesi ve kontrolünün güvenliğini sağlama öncülü altında ticari ve ticari işletmelerin işlerine yeniden başlamasını ve üretimini düzenli ve etkili bir şekilde organize etmesini zorunlu kılmak.") 3031 .endObject; 3233 // Sunucuya gönder 3435 client.prepareIndex ("index_hello", "makale", "1") 3637 .setSource (oluşturucu) 3839 .get; 4041 // Kaynakları kapatın 4243 müşteri.close; 44454647} 4849}7.5 Sorgu (temel işlev)
_Id ile sorgu
Terime göre sorgulama
QueryString'e göre
Sayfalamayı ayarlama (sorguyu yürütmeden önce SearchResponse'da setFrom ve setSize yöntemleri)
Vurguyu ayarla
Bahar Verileri Elasticsearch
ES'yi çalıştırmak için orijinal JAVA istemcisini kullanmak çok karmaşıktır ve Spring, ES'nin çalışmasını entegre etmede en iyisidir, bu nedenle Spring Data'yı kullanmanız önerilir ve orijinali anlamak için yeterlidir.
8.1 Bir Maven projesi oluşturun ve koordinatları içe aktarın
1 < bağımlılıklar > 23 < bağımlılık > 45 < Grup kimliği > org.elasticsearch < /Grup kimliği > 67 < artifactId > elasticsearch < / artifactId > 89 < versiyon > 5.6.10 < / version > 1011 < /bağımlılık > 1213 < bağımlılık > 1415 < Grup kimliği > org.elasticsearch.client < /Grup kimliği > 1617 < artifactId > Ulaşım < / artifactId > 1819 < versiyon > 5.6.10 < / version > 20 yirmi bir < /bağımlılık > yirmi iki yirmi üç < bağımlılık > yirmi dört 25 < Grup kimliği > org.apache.logging.log4j < /Grup kimliği > 2627 < artifactId > log4j-slf4j arası < / artifactId > 2829 < versiyon > 2.9.1 < / version > 3031 < /bağımlılık > 3233 < bağımlılık > 3435 < Grup kimliği > org.slf4j < /Grup kimliği > 3637 < artifactId > slf4j-api < / artifactId > 3839 < versiyon > 1.7.24 < / version > 4041 < /bağımlılık > 4243 < bağımlılık > 4445 < Grup kimliği > org.slf4j < /Grup kimliği > 4647 < artifactId > slf4j-basit < / artifactId > 4849 < versiyon > 1.7.21 < / version > 5051 < /bağımlılık > 5253 < bağımlılık > 5455 < Grup kimliği > log4j < /Grup kimliği > 5657 < artifactId > log4j < / artifactId > 5859 < versiyon > 1.2.12 < / version > 6061 < /bağımlılık > 6263 < bağımlılık > 6465 < Grup kimliği > Junit < /Grup kimliği > 6667 < artifactId > Junit < / artifactId > 6869 < versiyon > 4.12 < / version > 7071 < /bağımlılık > 7273 < bağımlılık > 7475 < Grup kimliği > com.fasterxml.jackson.core < /Grup kimliği > 7677 < artifactId > Jackson çekirdekli < / artifactId > 7879 < versiyon > 2.8.1 < / version > 8081 < /bağımlılık > 8283 < bağımlılık > 8485 < Grup kimliği > com.fasterxml.jackson.core < /Grup kimliği > 8687 < artifactId > jackson-databind < / artifactId > 8889 < versiyon > 2.8.1 < / version > 9091 < /bağımlılık > 9293 < bağımlılık > 9495 < Grup kimliği > com.fasterxml.jackson.core < /Grup kimliği > 9697 < artifactId > jackson-annotations < / artifactId > 9899 < versiyon > 2.8.1 < / version > 100101 < /bağımlılık > 102103 < bağımlılık > 104105 < Grup kimliği > org.springframework.data < /Grup kimliği > 106107 < artifactId > Spring-data-elasticsearch < / artifactId > 108109 < versiyon > 3.0.9. YAYIN < / version > 110111 < istisnalar > 112113 < dışlama > 114115 < Grup kimliği > org.elasticsearch.plugin < /Grup kimliği > 116117 < artifactId > transport-netty4-client < / artifactId > 118119 < / dışlama > 120121 < / hariç tutmalar > 122123 < /bağımlılık > 124125 < bağımlılık > 126127 < Grup kimliği > org.springframework < /Grup kimliği > 128129 < artifactId > bahar testi < / artifactId > 130131 < versiyon > 5.0.8. YAYIN < / version > 132133 < dürbün > Ölçek < /dürbün > 134135 < /bağımlılık > 136137138139 < / bağımlılıklar >8.2 Yapılandırma dosyası ekleyin
1 < ? xml version = "1.0" encoding = "UTF-8"? > 23 < fasulye xmlns = " 45 xmlns: xsi = " 67 xmlns: context = " 89 xmlns: elasticsearch = " 1011 xsi: schemaLocation = " 1213http: //www.springframework.org/schema/beans 1415http: //www.springframework.org/schema/beans/spring-beans.xsd 1617http: //www.springframework.org/schema/context 1819http: //www.springframework.org/schema/context/spring-context.xsd 2021http: //www.springframework.org/schema/data/elasticsearch yirmi iki 23http: //www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.0.xsd yirmi dört 25 " > 2627 < ! - İstemci nesnesi - > 2829 < elasticsearch: transport-client id = "esClient" cluster-name = "elasticsearch" cluster-nodes = "127.0.0.1:9300" / > 3031 < ! - Paket Tarayıcı - > 3233 < elasticsearch: repositories base-package = "com.itheima.es.repositories" / > 3435 < ! - Şablon nesnesi - > 3637 < bean id = "elasticsearchTemplate" class = "org.springframework.data.elasticsearch.core.ElasticsearchTemplate" > 3839 < yapıcı-arg adı = "müşteri" ref = "esClient" / > 4041 < /fasulye > 4243 < /Fasulyeler >8.3 Varlık sınıfı oluşturun ve dao arayüzü ekleyin
1 @ Document (indexName = "my_blog", type = "makale") 23public class Article { 45 @ Kimlik 67 @Field (tür = FieldType.Long) 89 özel Long id; 1011 @Field (type = FieldType.Text, analizör = "ik_smart") 1213 özel String başlığı; 1415 @Field (type = FieldType.Text, analizör = "ik_smart") 1617 özel String içeriği; 18192021 genel Makale { yirmi iki yirmi üç } yirmi dört 252627 genel Makale (Uzun id, Dize başlığı, Dize içeriği) { 2829 this.id = id; 3031 this.title = title; 3233 this.content = içerik; 3435} 36373839 public Long getId { 4041 dönüş kimliği; 4243} 44454647 public void setId (Long id) { 4849 this.id = id; 5051} 52535455 public String getTitle { 5657 dönüş başlığı; 5859} 60616263 public void setTitle (Dize başlığı) { 6465 this.title = title; 6667} 68697071 public String getContent { 7273 iade içeriği; 7475} 76777879 public void setContent (Dize içeriği) { 8081 this.content = içerik; 8283} 84858687 @Override 8889 public String toString { 9091 iade "Makale {" + 9293 "id =" + id + 9495 ", başlık = '" + başlık +' \ '' + 9697 ", içerik = '" + içerik +' \ '' + 9899 '}'; 100101} 102103} 1public arayüz ArticleRepository, ElasticsearchRepository'yi genişletir < Makale, Uzun > { 23}8.4 İndeks eşleme ve belge ekleme, silme, değiştirme ve sorgulama
1 @ RunWith (SpringRunner.class) 23 @ ContextConfiguration ("sınıf yolu: applicationContext.xml") 45public class ESTest { 67 @Autowired 89 özel Makale Deposu makale Deposu; 1011 @Autowired 1213 özel ElasticsearchTemplate şablonu; 1415 @Test 1617 public void createIndex { 1819 // Dizin oluştur ve eşlemeyi yapılandır 2021 template.createIndex (Article.class); yirmi iki 23 // Eşlemeyi yapılandırın yirmi dört 25 // template.putMapping (Article.class); 2627} 2829 @Test 3031 public void addDocumentAndUpdateDocument { 3233 Makale makalesi = yeni Makale (2L, "Güncel Olaylar Haberleri Gözü Televizyonda yayınlanan ender bir konferansta, Xi Jinping, ikinci ayın ilk günü olan 23 Şubat" salgın "ile mücadele etmek için bu şekilde seferber oldu. Büyük Halk Salonu düzenlendi ve şubelerdeki mekanlar ilçelere ve alaylara kuruldu. Çin salgın önleme ve kontrol için halk savaşı, genel savaş ve direniş savaşı veriyor. Bu savaş nasıl analiz edilir? Şu anki adım nerede? Şahsen nasıl kazanılır? Savaşı yöneten Xi Jinping, bu "savaş zamanı toplantısında" sakince cevap verdi); 3435 // belge ekle 3637 articleRepository.save (makale); 3839} 4041 @Test 4243 public void delDocument { 4445 // Id'ye göre sil 4647 makaleRepository.deleteById (1L); 4849 // Tümünü sil 5051 // articleRepository.deleteAll; 5253} 5455 @Test 5657 public void findAll { 5859 Tekrarlanabilir < makale > all = articleRepository.findAll; 6061 hepsi. Her biri için (bir- > System.out.println (a)); 6263} 6465 @Test 6667 public void findById { 6869 Opsiyonel < makale > isteğe bağlı = articleRepository.findById (2L); 7071 System.out.println (isteğe bağlı.get); 7273} 7475}8.5 Özel sorgu
Arayüzde özel sorguları tanımlayın, IDEA kullanırken ipuçları olacaktır
8.6 Orijinal sorgu koşulu sorgusu
1 @Test 23 public void nativeSearch { 45 NativeSearchQuery sorgu = yeni NativeSearchQueryBuilder 67.withQuery ( 89 QueryBuilders.queryStringQuery ("Sorguyu test et") 1011.defaultField ("başlık") 1213) .withPageable (PageRequest.of (0,15)) 1415. yapı; 1617 Toplu Sayfa < makale > makaleler = şablon.queryForPage (sorgu, Article.class); 1819 makale. Her biri için (a- > System.out.println (a)); 20 yirmi bir }Bu noktada ES öğrenmek proje için yeterli oldu, bu yüzden bu teknolojiyi öğrendikten sonra beyninizden kurtulmasına izin vermeyin, acele edin ve projenize uygulayın. Son olarak, teknolojiyi daha çok öğrenmenizi dilerim!
Ekli alan özellikleri Ayrıntılı alan özellikleri tip
Elasticsearch'te desteklenen veri türleri çok zengindir:
Birkaç önemli şey söylüyoruz:
İki tür Dize vardır:
metin: kelime bölümlere ayrılabilir, toplamaya katılamaz
anahtar kelime: ayrılmaz kelimeler, veriler tam bir alan olarak eşleştirilecek ve toplamaya katılabilecek
Sayısal: Sayısal tip, iki kategoriye ayrılmıştır
Temel veri türleri: long, integer, short, byte, double, float, half_float
Yüksek hassasiyetli kayan nokta numarası türü: scaled_float
10 veya 100 gibi bir kesinlik faktörü belirtmeniz gerekir. Elasticsearch, gerçek değeri bu faktörle çarpacak ve depolayacak ve çıkarıldığında geri yükleyecektir.
Tarih: tarih türü
Elasticsearch, tarihi depolama için bir dize olarak biçimlendirebilir, ancak bunu bir milisaniye değeri olarak saklamamız ve yerden tasarruf etmek için uzun bir süre saklamamız önerilir.
indeks
Dizin, alanın dizinini etkiler.
doğru: Alan dizine eklenir ve arama için kullanılabilir. Varsayılan değer doğrudur
false: alan dizine eklenmeyecek ve arama için kullanılamaz
İndex'in varsayılan değeri true'dur, bu da tüm alanların herhangi bir konfigürasyon olmadan dizine alınacağı anlamına gelir.
Ancak, ürün resmi bilgileri gibi indekslenmesini istemediğimiz bazı alanlar, indeksi manuel olarak yanlış olarak ayarlamanız gerekir.
mağaza
Verilerin ek olarak saklanıp saklanmayacağı.
Lucene ve Solr öğrenirken, bir alanın deposu yanlış olarak ayarlanmışsa, belge listesinde bu alanın değeri olmayacağını ve kullanıcının arama sonuçlarında görüntülenmeyeceğini biliyoruz.
Ancak Elasticsearch'te mağaza yanlış değerine ayarlanmış olsa bile sonuçları arayabilirsiniz.
Bunun nedeni, Elasticsearch'ün bir belge dizini oluşturduğunda, belgedeki orijinal verileri yedeklemesi ve _source adlı bir özniteliğe kaydetmesidir. Ve hangisinin görüntülenip hangilerinin görüntülenmeyeceğini seçmek için _source'u filtreleyebiliriz.
Depolamayı true olarak ayarlarsanız, gereksiz olan _source'a ek olarak fazladan bir veri parçası da depolanır, bu nedenle depoyu genellikle false olarak ayarlarız. Aslında, store varsayılan değeri false'tur.
artırmak
Motivasyon faktörü, bu Lucene'deki ile aynı
Diğerleri tek tek anlatılmayacak ve fazla kullanılmamaktadır.Lütfen resmi belgelere bakınız:
Orijinal bağlantı:
https://blog.csdn.net/mr_xinchen/article/details/104231377