dependency>
<groupId>org.apache.lucene
groupId> <artifactId>lucene-coreartifactId>
<version>7.1.0version>
dependency>
Oxirgi versiyani bu yerda topishingiz mumkin.
Shuningdek, qidiruv so'rovlarimizni tahlil qilish uchun bizga kerak bo'ladi:
<dependency>
<groupId>org.apache.lucenegroupId>
<artifactId>lucene-queryparserartifactId>
<version>7.1.0version>
dependency>
Oxirgi versiyani bu yerda tekshiring.
3. Asosiy tushunchalar
3.1. Indekslash
Oddiy qilib aytganda, Lucene ma'lumotlarning "teskari indeksatsiyasi" dan foydalanadi - sahifalarni kalit so'zlarga solishtirish o'rniga, u har qanday kitob oxiridagi lug'at kabi kalit so'zlarni sahifalarga joylashtiradi.
Bu matn orqali to'g'ridan-to'g'ri qidirish o'rniga, indeks bo'yicha qidirayotgani uchun tezroq qidiruv javoblarini beradi
3.2. Hujjatlar
Bu erda hujjat maydonlar to'plamidir va har bir maydon u bilan bog'langan qiymatga ega.
Indekslar odatda bir yoki bir nechta hujjatlardan iborat bo'lib, qidiruv natijalari eng mos hujjatlar to'plamidir.
AD Bu har doim ham oddiy matnli hujjat emas, balki ma'lumotlar bazasi jadvali yoki to'plam bo'lishi mumkin.
3.3. Maydonlar
Hujjatlarda maydon ma'lumotlari bo'lishi mumkin, bu erda maydon odatda ma'lumotlar qiymatini saqlaydigan kalit hisoblanadi:
title: Goodness of Tea
body: Discussing goodness of drinking herbal tea...
E'tibor bering, bu erda sarlavha va matn maydonlar bo'lib, ularni birgalikda yoki alohida qidirish mumkin.
3.4. Tahlil
Tahlil qidiruvni osonlashtirish uchun berilgan matnni kichikroq va aniq birliklarga aylantirishdir.
Matn kalit so'zlarni ajratib olish, umumiy so'zlar va tinish belgilarini olib tashlash, so'zlarni kichik harflarga o'zgartirish va hk bo'yicha turli operatsiyalardan o'tadi.
Buning uchun bir nechta o'rnatilgan analizatorlar mavjud:
StandardAnalyzer – asosiy grammatika asosida tahlil qiladi, “a”, “an” va hokazo kabi toʻxtash soʻzlarini olib tashlaydi. Shuningdek, kichik harflar bilan ham oʻzgartiradi.
SimpleAnalyzer - harfsiz belgilar asosida matnni buzadi va kichik harflarga aylantiradi
WhiteSpaceAnalyzer - matnni oq bo'shliqlar asosida buzadi
Foydalanishimiz va sozlashimiz uchun ko'proq analizatorlar mavjud.
3.5. Qidirilmoqda
Indeks yaratilgandan so'ng, biz ushbu indeksni Query va IndexSearcher yordamida qidirishimiz mumkin. Qidiruv natijasi odatda olingan ma'lumotlarni o'z ichiga olgan natijalar to'plamidir.
Esda tutingki, IndexWritter indeks yaratish va indeksni qidirish uchun IndexSearcher uchun javobgardir.
3.6. So'rov sintaksisi
Lucene juda dinamik va yozilishi oson so'rovlar sintaksisini ta'minlaydi.
Erkin matnni qidirish uchun so'rov sifatida faqat String matnidan foydalanamiz.
Muayyan sohada matnni qidirish uchun biz foydalanamiz:
fieldName:text eg:
title:tea
Qidiruv diapazoni:
timestamp:[1509909322,1572981321]
Shuningdek, biz joker belgilar yordamida qidirishimiz mumkin
dri?nk
“?” belgisi oʻrniga bitta belgi qidiradi.
d*k
“d” bilan boshlanib, “k” harfi bilan tugaydigan, orasiga bir nechta belgilar qo‘yilgan so‘zlarni qidiradi
uni*
“uni” bilan boshlangan so‘zlarni topadi.
Shuningdek, biz ushbu so'rovlarni birlashtirib, murakkabroq so'rovlarni yaratishimiz mumkin. AND, NOT, OR kabi mantiqiy operatorni qo'shing:
title: "Tea in breakfast" AND "coffee"
Bu yerda soʻrovlar sintaksisi haqida koʻproq maʼlumot oling.
4. Oddiy dastur
Keling, oddiy dastur yaratamiz va ba'zi hujjatlarni indekslaymiz.
Birinchidan, biz xotira indeksini yaratamiz va unga ba'zi hujjatlarni qo'shamiz:
... Directory memoryIndex = new RAMDirectory();
StandardAnalyzer analyzer = new StandardAnalyzer();
IndexWriterConfig indexWriterConfig = new IndexWriterConfig(analyzer); IndexWriter writter = new IndexWriter(memoryIndex, indexWriterConfig);
Document document = new Document();
document.add(new TextField("title", title, Field.Store.YES));
document.add(new TextField("body", body, Field.Store.YES));
writter.addDocument(document);
writter.close();
Bu erda biz TextField bilan hujjat yaratamiz va ularni IndexWriter yordamida indeksga qo'shamiz. TextField konstruktoridagi uchinchi argument maydon qiymati ham saqlanishi yoki saqlanmaganligini bildiradi.
Analizatorlar ma'lumotlarni yoki matnni bo'laklarga bo'lish, so'ngra ulardan to'xtash so'zlarini filtrlash uchun ishlatiladi. To'xtash so'zlari "a", "am", "is" va boshqalar kabi so'zlardir. Bular butunlay berilgan tilga bog'liq.
Keyinchalik, qidiruv so'rovini yaratamiz va qo'shilgan hujjat uchun indeksni qidiramiz:
Do'stlaringiz bilan baham: |