QO‘NG‘IROQ

Bu xabarni sizdan oldin o'qiganlar bor.
Eng so'nggi maqolalarni olish uchun obuna bo'ling.
Elektron pochta
Ism
Familiya
Qo'ng'iroqni qanday o'qishni xohlaysiz
Spam yo'q

Yangi qidiruvning funksionalligi ikkita mexanizmga asoslanadi:
- to'liq matnli qidiruv (juda tez ishlaydi va minimal hisoblash resurslarini talab qiladi);
- DBMS yordamida qidirish (umumiy holatda qidirishning davomiyligi va hisoblash resurslarining narxi jadvaldagi ma'lumotlar miqdoriga mutanosibdir).

Joriy amalga oshirishda ro'yxat qidiriladi foydalanmasdan to'liq matnli qidiruv quyidagi hollarda ():
- to'liq matnli indeks ma'lumotlar bazasi darajasida o'chirilgan;
- asosiy jadval ob'ekti to'liq matnli indeks bilan indekslanmagan;
- to'liq matnli qidiruvdan foydalangan holda qidiruv natijasida xatolik yuzaga keldi.

Agar ma'lumot bazasida to'liq matnli qidiruv yoqilgan bo'lsa va indeks umuman yoki qisman yangilanmagan bo'lsa (mijozlarning 95% infobazalaridagi amaliyotimdan), qidiruv paytida foydalanuvchi ishonchsiz yoki bo'sh qidiruv natijasini oladi. .

Biz 1C firmasidan so'raymiz - qanday bo'lish kerak? Qidiruv natijalari har doim haqiqiy bo'lishini qanday ta'minlash mumkin?
Javobni olamiz: Ha, toʻliq matnli qidiruv yoqilganda qidiruv natijalari yangilanishi uchun siz toʻliq matnli qidiruv indeksining yangilanganligiga ishonch hosil qilishingiz kerak. hali qidiruv ().

Va umuman "haqiqiy to'liq matn indeksi" bormi? Foydalanuvchilar soniga, ma'lumotlar bazasidagi ma'lumotlarning o'zgarishi intensivligiga va indekslarni yangilash chastotasiga bog'liq. Odatda, indeksni yangilash har 60 soniyada amalga oshiriladi. Xo'sh, agar ko'p ob'ektlar o'zgartirilmagan bo'lsa va protsedura ushbu 60 soniya ichida barcha o'zgarishlarni qayta ishlashga muvaffaq bo'lsa. Va agar siz bir guruh hujjatlarni qayta joylashtirishni yoki katalogni ommaviy qayta yozishni amalga oshirgan bo'lsangiz? Bunday holda, indeksdagi qidiruv yana ishonchli ma'lumotlarni taqdim etadigan vaqtga hech kim kafolat bera olmaydi.
Aslida, bu juda muhim emas, ba'zi holatlar bundan mustasno. Foydalanuvchilar ishlashi uchun keng tarqalgan variant - bu ro'yxatda qandaydir qiymat bo'yicha tanlovni o'rnatish, masalan, "Qarshi tomon", yangisini kiritish yoki mavjud hujjatni nusxalash va uni yozib olish. Eski qidiruv bilan yangi hujjat darhol ro'yxatda ko'rinadigan bo'ldi. Endi foydalanuvchi buni faqat N soniyadan keyin ko'radi, bu erda N 2-3 emas, balki 50-60 soniyaga yaqinroq.
Agar siz yangi hujjat yo'qligini sezmasangiz va tanlangan natijalar asosida kimgadir ma'lumot bersangiz, u shubhasiz ishonchsiz bo'ladi.

Bu infobase bilan normal ishlash holatida edi. Muayyan vaziyatlarda nima sodir bo'ladi? Men sizga bir nechta misol keltiraman.
1) Ishchi ma'lumotlar bazasida to'liq matnli indeks yoqiladi va tez-tez yangilanadi. Foydalanuvchi ishchi ma'lumotlar bazasining nusxasini unga joylashtirishni so'raydi, shunda u undagi ma'lumotlarni tahlil qilishi mumkin.
Biz zaxira nusxasini tiklaymiz va ruxsat beramiz. Lekin to'liq matnli qidiruv ishlamaydi, chunki. indeks DBMSda emas, balki alohida fayllarda (ham faylda, ham mijoz-server versiyasida) saqlanadi. Indeks dt faylida yo'q.
bular. foydalanuvchi ro'yxat qidiruvidan foydalanishi uchun ushbu ma'lumotlar bazasidagi to'liq matnli indeks o'chirilgan bo'lishi kerak. To'g'ri, foydalanuvchi qidiruv ancha uzoq davom etishidan biroz hayron bo'ladi. Yoki indeksni butun ma'lumotlar bazasi bo'ylab qayta yarating.

2) (Ko'proq yoki kamroq katta bazalar uchun haqiqiy). Ishlab chiqarish ma'lumotlar bazasida to'liq matnli indeks yoqilgan va tez-tez yangilanadi. Oyning oxiri keladi va davrning yopilishi boshlanadi. Biz hujjatlarni ommaviy yuklashni va uzatishni boshlaymiz. Tizimdagi yukni kamaytirish uchun biz mos ravishda rejalashtirilgan vazifalarning bajarilishini bloklaymiz va indeksni yangilash to'xtaydi. Foydalanuvchilar, yumshoq qilib aytganda, yo'qotishadi - nima uchun ro'yxatlarda yangi yoki o'zgartirilgan hujjatlar yo'q. Yagona yo'l - ma'lumotlar bazasini to'liq matnli qidirishni o'chirib qo'yish va shunga mos ravishda barcha tafsilotlarni qattiq qidirish tufayli uskunaga yanada ko'proq yuk olish.

Shunday qilib, menimcha, indeksni yangilash operatsiyasi ma'lumotlar bazasi ma'murlari uchun yana bir bosh og'rig'iga aylanadi.
Ilgari istalgan vaqtda ma'lumotlarning 100% aniqligi va dolzarbligini kafolatlagan tizim endi to'liq ishonch hosil qilib bo'lmaydigan ma'lumotnoma tizimiga aylanmoqda.
Va foydalanuvchilar IT xodimlarini qoralash uchun yana bir sababni olishadi - "tizimingiz to'g'ri ishlamayapti".

8.3 platformasida to'liq matnli qidiruv ishlab chiquvchilar tomonidan uzoq vaqt oldin e'lon qilinganiga qaramay (8.3.5 platformasidan beri), u standart konfiguratsiyalarda faol foydalanilmadi. Enterprise Accounting 3.0 ning so'nggi nashrlarida ishlab chiquvchilar ko'plab ro'yxatlarga to'liq matnli qidiruvni kiritdilar. Mening foydalanuvchilarim uchun bu zarba bo'ldi - dastur qidirishni to'xtatdi.

Albatta, to'liq matnli qidiruv ishlaydi, ammo "Topish" oynasini ko'rmaydigan foydalanuvchilar chalkashib ketishadi. Oddiy foydalanish stsenariysi: Klaviaturada yozishni boshlang, terayotganda qidiriladigan maydonni, izlanadigan matnni va "Qatorning bir qismi" qidiruv rejimini ko'rsatadigan "Topish" oynasi paydo bo'ladi.

Kirish tugmachasini bosish orqali ro'yxat filtrlanadi, ro'yxat ustida qidiruv holati paneli paydo bo'ladi. Qaysi sohada va nimani qidirayotganini foydalanuvchining o'zi belgilaydi. Yangi qidiruv siz uni kiritganingizdan so'ng darhol ishlay boshlaydi va ro'yxatda ko'rsatilgan barcha maydonlarga ta'sir qiladi. Alohida oyna ko'rinmaydi, qidiruv so'zlarining barcha mosliklari rang bilan ta'kidlangan.

Bir necha kun biz yangi izlanish bilan yashadik. Foydalanuvchilar azob chekishdi, shikoyat qilishdi, sabotaj qilishdi. Shikoyatlar to‘xtamadi, rahbariyatga “hammasini qanday bo‘lsa, shunday qiling” vazifasi qo‘yildi.

Qayerdan boshlash kerak? Shakllar bir-biridan qanday farq qilishini tushunishingiz kerak. Men konfiguratsiya manba kodlarini yangi qidiruv harakati va eskisi bilan yuklab oldim va shakllarning manba kodlarini solishtirdim.

"Qidiruv qatori" turiga ega shakl elementining qo'shilishi yangi to'liq matnli qidiruvning funksionalligi uchun javobgardir. Nimani izlash kerakligi aniq bo'ldi. ITS 7.3.1.5 bo'yicha maqola topildi. Dinamik ro'yxatda qidirish. Ushbu maqolani o‘rganib chiqib, qidiruvning yangi usuli ikki omilga bog‘liq degan xulosaga keldim: 1. Shakl yuqoridagi shakl elementining to‘ldirilishiga ega bo‘lishi kerak, 2. Formaning dinamik ro‘yxati “SearchStringPosition” xususiyatiga teng bo‘lmasligi kerak. "Yo'q".

Nazariy jihatdan serverda forma yaratishda "SearchString Position" ro'yxati xususiyatini "SearchString Position. Yo'q" ga o'rnatish kifoya, ammo bu barcha formalar bilan ishlamadi, ba'zi hollarda yangi qidiruv ishlashda davom etdi. Dasturiy ravishda yaratilmagan shakl elementlarini dasturiy yo'l bilan o'chira olmaymiz, lekin ko'rinishni nazorat qilish mumkin. Agar "AdditionSearchString" shakl elementi ko'rinishdan olib tashlansa, to'liq matnli yangi qidiruv ham ishlashni to'xtatadi. Tajribalar paytida men umumiy modulga joylashtirgan quyidagi kod tug'ildi:

NewSearchInLists(Form) Eksport ro'yxatini o'chirish tartibi = Form.Items.Find("Ro'yxat"); Agar Ro'yxat = Aniqlanmagan bo'lsa, Qaytish; EndIf; List.SearchStringPosition = SearchStringPosition.None; AdditionSearchString = Form.Elements.Find ("AdditionSearchString"); Agar NOT ComplementSearchString = Undefined Undefined Undefined ComplementSearchString.Visibility = False; EndIf; EndProcedure

"Ro'yxatlarda yangi qidiruvni o'chirish" protsedurasida siz tuzatilgan shaklni topshirishingiz kerak. Lekin buni bir vaqtning o'zida barcha shakllar uchun qanday qilish mumkin?

Birinchi yechim - shakl muharriri yordamida konfiguratorda kerakli shakllarni qo'lda tuzatish. Men bu qarorni darhol rad etdim - bu uzoq va qayg'uli va keyinroq konfiguratsiyani yangilash qiyin.

Ikkinchi yechim - shaklni ochishda yangi qidiruvni dasturiy ravishda o'chirib qo'yadigan protsedurani chaqirishdir. Jarayonni ishga tushirish barcha shakllarda ro'yxatdan o'tgan har qanday boshqa protseduradan chaqirish mumkin, bu holda keyingi yangilanishlar bilan biz faqat ushbu protsedurani kuzatishimiz kerak - u o'zgarmasligi uchun. Men GeneralModule.ManagePrint ni tanladim, unda quyidagilar mavjud:

OnCreateOnServer(Form,DefaultCommandPlace,PrintObjects) eksport qilish

Ushbu protsedura chop etish buyruqlarini to'ldirish uchun serverda forma yaratilganda chaqiriladi. Ushbu protsedurada biz ro'yxatlarda yangi qidiruvni o'chirish uchun funksiyamizni chaqiradigan kodni yozamiz:

MyGeneralModule.NewSearchInLists(Forma)ni o'chirish;

Buxgalterlar eski qidiruvdan zavqlanishmoqda va biz Enterprise Accounting 3.0 moslik rejimi bizga bu funksiyani kengaytmaga o‘tkazish imkonini beradigan vaqtga tayyorlanmoqdamiz.

Hozirgacha 8.1 versiyasidan boshlab 1C: Enterprise platformasi ajoyib va ​​juda foydali mexanizmga ega ekanligini kam odam biladi - to'liq matnli qidiruv. Bu nima? Bu siz uchun qanday foydali bo'lishi mumkin? Bu savollarga V.V.ning maqolasida javob berilgan. Baliqchilik, "1C" firmasi.

Birinchidan, bu qanday mexanizm haqida bir necha so'z. To'liq matnli qidiruv, sodda qilib aytganda, ishlatiladigan konfiguratsiyaning deyarli istalgan joyida joylashgan matnli ma'lumotlarni topishga imkon beradi. Shu bilan birga, siz kerakli ma'lumotlarni butun konfiguratsiya bo'ylab yoki qidiruv maydonini bir nechta ob'ektlarga (masalan, ma'lum turdagi hujjatlar yoki kataloglar) qisqartirish orqali qidirishingiz mumkin. Qidiruv mezonlarining o'zi juda keng doirada farq qilishi mumkin. Ya'ni, kerakli ma'lumotlarni ular konfiguratsiyada qayerda saqlanganligini va ular qanday aniq yozilganligini eslamasdan ham topishingiz mumkin.

To'liq matnli qidiruv quyidagi xususiyatlarni beradi.

  1. Transliteratsiyani qo'llab-quvvatlash mavjud (GOST 7.79-2000 bo'yicha ruscha so'zlarni lotin harflari bilan yozish). Misol: "ruscha ibora" = "ruscha fraza".
  2. O'zgartirishni qo'llab-quvvatlash mavjud (ruscha so'zlardagi belgilarning bir qismini bitta kalitli lotin harflari bilan yozish). Misol: "russrfz frapf" (har bir so'zning oxiri lotin tilida yoziladi, masalan, operator xatosi natijasida).
  3. Loyqalik chegarasini ko'rsatgan holda loyqa qidiruv (topilgan so'zlardagi harflar farq qilishi mumkin) imkoniyati mavjud. Misol: qidiruv satrida "salom" so'zini va 17% loyqalikni ko'rsatib, biz barcha o'xshash so'zlarni xatoli va xatosiz topamiz: "salom", "salom", "olib keling".
  4. Tanlangan metadata ob'ektlarini qidirish doirasini belgilash mumkin.
  5. Standart maydonlar nomlarini ("Kod", "Tavsif" va boshqalar) to'liq matnli indekslash barcha konfiguratsiya tillarida amalga oshiriladi.
  6. Qidiruv rus, ingliz va ukrain tillarining sinonimlarini hisobga olgan holda amalga oshiriladi.
  7. Rus tilining morfologik lug'ati 1C: Enterprise dastur tizimidan foydalangan holda avtomatlashtirilgan faoliyat sohalariga tegishli bir qator aniq so'zlarni o'z ichiga oladi.
  8. Standart sifatida taqdim etilgan lug'atlarga lug'at ma'lumotlar bazalari va tezaurus va rus, ukrain va sinonimlarning lug'atlari kiradi. Ingliz Informatik tomonidan taqdim etilgan.
  9. Siz joker belgilar ("*"), shuningdek qidiruv operatorlarini ("VA", "YOKI", "YO'Q", "YAqin") va maxsus belgilarni ko'rsatish orqali qidirishingiz mumkin.

To'liq matnli qidiruv 1C: Enterprise 8.1 platformasida har qanday konfiguratsiyada amalga oshirilishi mumkin.

Bu 8.0 versiyasidan o'zgartirilgan konfiguratsiyalarga ham tegishli. To'liq matnli qidirish imkoniyatlarini yoqish uchun konfiguratsiyangizning "Amallar" menyusiga o'ting va "To'liq matnli qidiruvni boshqarish" bandini tanlang va keyin ushbu xususiyatni yoqing (1-rasmga qarang).

Guruch. bitta

Agar siz 8.1 platformasida odatiy konfiguratsiyalardan foydalansangiz, ular allaqachon o'rnatilgan "Ma'lumotlarni qidirish" jarayoniga ega ("Asboblar" / "Ma'lumotlarni qidirish" menyusi). Agar foydalanilgan konfiguratsiyada bunday ishlov berish yo'q bo'lsa, bu muhim emas.

Uni har doim ITS diskida topish mumkin. Ushbu maqolada biz to'liq matnli qidirish imkoniyatlarini namoyish qilish uchun "Korxona buxgalteriya hisobi" demo konfiguratsiyasida (vah. 1.6) ushbu qayta ishlashning misollaridan foydalanamiz.

Yuqorida aytib o'tilganidek, qidiruv bir nechta so'zlar, qidiruv operatorlari va aniq iboralar yordamida amalga oshirilishi mumkin. Bundan tashqari, qidiruv joylashuvi ma'lum konfiguratsiya ob'ektlari (masalan, Ishlab chiqarish xizmatlari to'g'risidagi qonun hujjatlari) yoki konfiguratsiya ob'ektlari ro'yxati/to'plami bilan cheklanishi mumkin.

Ma'lumotlarni qidirishda jadvalda ko'rsatilgan qidiruv satrida qidiruv operatorlaridan foydalanishga ruxsat beriladi (barcha operatorlar faqat KAPITAL harflar bilan va tirnoqsiz ko'rsatilishi kerak).

Jadval


Yodda tuting: agar operatorlar ko'rsatilmagan bo'lsa (so'zlar bo'sh joy bilan yozilsa), dastur so'rovdagi barcha so'zlarni "VA" operatori yordamida qidiradi.

Guruch. 2-rasmda so'zning oddiy qismini qidirish misoli ko'rsatilgan. "Umid *" ni yozib, biz havolani oldik jismoniy shaxs, shuningdek, sharhlarida "Ishonchli mijoz" iborasi mavjud bo'lgan hujjatlarda.


Guruch. 2

Guruch. 3-rasmda qidiruv satrida "YOKI" konstruksiyasidan foydalangan holda va "Nomenklatura" katalogidagi qidiruv maydonini cheklash va "Tovar va xizmatlarni qabul qilish", "Tovar va xizmatlarni sotish" hujjatlaridan foydalangan holda murakkabroq qidiruv misoli ko'rsatilgan. Ko'rinib turibdiki, qidiruv butun nomenklaturani aks ettirgan, ularning nomlarida "choynak" yoki "BINATONE" so'zlari, shuningdek, barcha tegishli nomenklaturani o'z ichiga olgan ushbu turdagi barcha hujjatlar mavjud.


Har bir buxgalter bu haqda bilmaydi. foydali vosita 1C da: Buxgalteriya 8, to'liq matnli qidiruv sifatida. To'liq matnli qidiruv mexanizmi konfiguratsiyaning istalgan joyidan matnli ma'lumotlarni topish imkonini beradi.

To'liq matnli qidiruv "Asboblar" menyusida joylashgan "Ma'lumotlarni qidirish" ishlov berish yordamida amalga oshiriladi:

Keling, to'liq matnli qidiruv mexanizmi qanday ishlashiga bir nechta misollarni ko'rib chiqaylik.

1-misol Aytaylik, ma'lum bir mahsulotni, masalan, Marlboro sigaretlarini olish uchun hujjatlarni tezda topishimiz kerak.
"Asboblar" menyusidan "Ma'lumotlarni qidirish" ni tanlang. Ochilgan oynada, yuqori maydonda "Marlboro" qidiruv so'rovini kiriting va "Izlash" tugmasini bosing:


2-misol Tashkilotimiz Rumyantsev biznes markazi yaqinida ofisni ijaraga oladi. Ma'lumotlar bazasidan 2010 yil mart oyi uchun ijara dalolatnomasini tezda topish kerak. Biz quyidagi qidiruv so'rovini qilamiz:


Variant 3. Aytaylik, tovarlarni jo'natishda biz ba'zi hujjatlarda "Tovarlar va xizmatlarni sotish" - "To'lovni kechiktirish" kabi sharhni qoldirdik. Va biz kechikish bilan yuborilgan barcha hujjatlarni topishimiz kerak edi. Biz quyidagi qidiruv so'rovini qilamiz:

Qidiruv operatorlari (AND, OR, NOT, NEAR) yordamida ham murakkabroq qidiruvni amalga oshirishingiz mumkin.
Qidiruv maydoni muayyan konfiguratsiya ob'ektlari bilan cheklanishi mumkin (masalan, Tovar va xizmatlarni qabul qilish hujjati). Buning uchun "sozlamalar" tugmasini bosing:

Konfiguratsiya ob'ektini tanlash uchun maydon paydo bo'ladi. "Qidiruv doiralarini cheklash" katagiga belgi qo'ying va "Qidirish uchun metadata ob'ektlarini tanlang" tugmasini bosing:

Masalan, "Tovar va xizmatlarni qabul qilish" hujjatini tanlang.

Qidiruv so'rovini kiritish va qidirish qoladi.

"Ma'lumotlarni qidirish" ni qayta ishlashning pastki qismida indeksning dolzarbligi aks ettirilgan. Agar siz "Indeks yangilanmagan" ni ko'rsangiz, "Indeksni yangilash" tugmasini bosishingiz kerak.

To'liq matn qidirish- ishlatiladigan konfiguratsiyaning deyarli istalgan joyida joylashtirilgan matnli ma'lumotlarni topish imkonini beradi. Shu bilan birga, siz kerakli ma'lumotlarni butun konfiguratsiya bo'ylab yoki qidiruv maydonini bir nechta ob'ektlarga (masalan, ma'lum turdagi hujjatlar yoki kataloglar) qisqartirish orqali qidirishingiz mumkin. Qidiruv mezonlarining o'zi juda keng doirada farq qilishi mumkin. Ya'ni, kerakli ma'lumotlarni ular konfiguratsiyada qayerda saqlanganligini va ular qanday aniq yozilganligini eslamasdan ham topishingiz mumkin.

To'liq matnli qidiruv quyidagi xususiyatlarni beradi:

  • Transliteratsiyani qo'llab-quvvatlash mavjud (GOST 7.79-2000 bo'yicha ruscha so'zlarni lotin harflari bilan yozish). Misol: "ruscha ibora" = "ruscha fraza".
  • O'zgartirishni qo'llab-quvvatlash mavjud (ruscha so'zlardagi belgilarning bir qismini bitta kalitli lotin harflari bilan yozish). Misol: "russrfz frapf" (har bir so'zning oxiri lotin tilida yoziladi, masalan, operator xatosi natijasida).
  • Loyqalik chegarasini ko'rsatgan holda loyqa qidiruv (topilgan so'zlardagi harflar farq qilishi mumkin) imkoniyati mavjud. Misol: qidiruv satrida "salom" so'zini va 17% loyqalikni ko'rsatib, biz barcha o'xshash so'zlarni xatoli va xatosiz topamiz: "salom", "salom", "olib keling".
  • Tanlangan metadata ob'ektlarini qidirish doirasini belgilash mumkin.
  • Standart maydonlar nomlarini ("Kod", "Tavsif" va boshqalar) to'liq matnli indekslash barcha konfiguratsiya tillarida amalga oshiriladi.
  • Qidiruv rus, ingliz va ukrain tillarining sinonimlarini hisobga olgan holda amalga oshiriladi.
  • Rus tilining morfologik lug'ati 1C: Enterprise dastur tizimidan foydalangan holda avtomatlashtirilgan faoliyat sohalariga tegishli bir qator aniq so'zlarni o'z ichiga oladi.
  • Standart sifatida taqdim etilgan lug'atlar Informatik tomonidan taqdim etilgan rus, ukrain va ingliz tillarining lug'at ma'lumotlar bazasi va tezaurus va sinonimlarning lug'atlarini o'z ichiga oladi.
  • Siz joker belgilar ("*"), shuningdek qidiruv operatorlarini ("VA", "YOKI", "YO'Q", "YAqin") va maxsus belgilarni ko'rsatish orqali qidirishingiz mumkin.

To'liq matnli qidiruv 1C: Enterprise 8 platformasida har qanday konfiguratsiyada amalga oshirilishi mumkin

To'liq matnli qidiruvni boshqarish oynasini ochish uchun quyidagilarni bajaring:

Umumiy ilova- menyu elementi Operatsiyalar - To'liq matnli qidiruvni boshqarish.

Boshqariladigan dastur- menyu elementi Asosiy menyu - Barcha funktsiyalar - Standart -To'liq matnli qidiruv boshqaruvi.


  • Indeksni yangilash– indeks yaratish/indeksni yangilash;
  • Indeksni tozalash– indeksni nolga tenglashtirish (barcha ma’lumotlar yangilangandan keyin tavsiya etiladi);
  • element indekslarni birlashtirishga ruxsat berish- asosiy va qo'shimcha indeksni birlashtirish uchun javobgardir.

To'liq matnli qidiruv to'liq matnli indeks yordamida amalga oshiriladi. Indeks bo'lmasa, to'liq matnli qidirish mumkin emas. Qidiruv muvaffaqiyatli bo'lishi uchun barcha kerakli ma'lumotlar to'liq matn indeksiga kiritilishi kerak. Agar foydalanuvchi tomonidan ma'lumotlar bazasiga yangi ma'lumotlar kiritilgan bo'lsa, u ko'rib chiqilayotgan indeksga kiritilishi kerak, aks holda u qidiruvda qatnashmaydi. Bunga yo'l qo'ymaslik uchun to'liq matn indeksini yangilashingiz kerak. Yangilashda tizim faqat ma'lum turdagi ma'lumotlarni tahlil qiladi: String, Ma'lumot turidagi ma'lumotlar (hujjatlarga, kataloglarga havolalar), Raqam, Sana, qiymatni saqlash. Agar foydalanuvchi ma'lum ma'lumotlarga kirish huquqiga ega bo'lmasa, u uni qidiruv natijalarida ko'ra olmaydi. Shuni ham unutmaslik kerakki, qidiruv amalga oshiriladigan ob'ektlarning xususiyatlari o'rnatilishi kerak To'liq matnli qidiruv - Foydalanish, bu sukut bo'yicha o'rnatiladi.

Ko'rib turganingizdek, mulk Foydalanish butun katalog uchun o'rnatiladi Qarama-qarshi tomonlar, lekin bu uning tegishli turdagi atributlarining har biri uchun ham amalga oshirilishi mumkin.

Keling, ikki qismdan (indekslardan) iborat to'liq matnli indeksni batafsil ko'rib chiqaylik: asosiy indeks va qo'shimcha. Yuqori tezlik Ma'lumotlarni qidirish asosiy indeks hisobidan ta'minlanadi, lekin uni yangilash ma'lumotlar hajmiga qarab nisbatan sekin. To'ldiruvchi indeks uning teskarisidir. Ma'lumotlar unga tezroq qo'shiladi, ammo qidiruv sekinroq. Tizim ikkala indeksni bir vaqtning o'zida qidiradi. Ma'lumotlarning aksariyati asosiy indeksda joylashgan bo'lsa, tizimga qo'shilgan ma'lumotlar ikkinchi darajali indeksda tugaydi. Ikkilamchi indeksdagi ma'lumotlar miqdori kichik bo'lsa, uni qidirish nisbatan tezdir. Tizimga yuk kam bo'lgan bir vaqtda indekslarni birlashtirish operatsiyasi sodir bo'ladi, buning natijasida qo'shimcha indeks o'chiriladi va barcha ma'lumotlar asosiy indeksga joylashtiriladi. Tizimdagi yuk minimal bo'lgan vaqtda indekslarni birlashtirish afzaldir. Shu maqsadda siz tartibga solinadigan vazifalar va rejalashtirilgan vazifalarni yaratishingiz mumkin.

Qidiruv ifodasini belgilashda ruxsat etilgan maxsus operatorlar

To'liq matnli qidiruv mexanizmi ruscha so'z belgilarining bir qismini bitta kalitli lotin harflari bilan yozish imkonini beradi. Qidiruv natijasi o'zgarmaydi.

Ikki operator yonma-yon

  • soddalashtirilgan. 8 ta so'z
  • NEAR/[+/-]n – ular orasidagi n-1 so‘z masofada bitta atributdagi ma’lumotlarni qidirish.

Belgi birinchi so'zdan ikkinchi so'z qaysi yo'nalishda qidirilishini ko'rsatadi. (+ - keyin, - oldin)

Joyker belgisi "*" faqat so'z oxiri o'rniga ishlatilishi mumkin

Loyqa operator "#". Agar ismning aniq yozilishi ma'lum bo'lmasa.

Dasturiy vositalar va vositalar 1s: dasturlash.

Sinonim operatori "!". So'z va uning sinonimlarini topishga imkon beradi

To'liq matnli qidiruv indeksini dasturiy jihatdan qanday yangilash mumkin?

Code 1C v 8.x Procedure UpdateIndexes() eksporti
FulltextSearch.UpdateIndex();
EndProcedure

To'liq matnli ma'lumotlarni qidirish misoli

O'zgaruvchan ta'rifli qidiruv ro'yxati

Kod 1C v 8.x o'zgaruvchan qidiruv ro'yxati;

Bundan tashqari, hodisani qayta ishlash tartibida Shakl ochilganda, biz ushbu o'zgaruvchi to'liq matnli qidiruv ro'yxatini o'z ichiga olishini aniqlaymiz, uning yordamida biz ma'lumotlarni qidiramiz.

Kod 1C v 8.x protsedurasi OnOpen()
SearchList = FullTextSearch.CreateList();
EndProcedure

Endi, Topish tugmasini bosish hodisasi uchun SearchExpression maydonida ko'rsatilgan ifodaga muvofiq qidirish imkonini beradigan kodni yozamiz.

Code 1C v 8.x Protsedura FindClick(Element)
SearchList.SearchString = SearchExpression;
Urinish
SearchList.FirstPart();
Istisno
Ogohlantirish (ErrorDescription());
Urinishning tugashi;
Agar SearchList.TotalCount() = 0 bo'lsa
FormElements.MessageOResult.Value = "topilmadi";
FormElements.SearchResult.SetText("");
Aks holda
PrintSearchResult();
EndIf;
EndProcedure

Ushbu protsedurada birinchi navbatda foydalanuvchi tomonidan kiritilgan qidiruv ifodasini to'liq matnli qidiruv uchun qidiruv qatori sifatida o'rnatamiz. Keyin biz FirstPart() usulini bajaramiz, bu aslida to'liq matnli qidiruvni boshlaydi va natijalarning birinchi partiyasini qaytaradi. Odatiy bo'lib, bir qism 20 ta elementni o'z ichiga oladi. Shundan so'ng, biz qidiruv ro'yxatidagi elementlar sonini tahlil qilamiz. Agar u hech qanday elementni o'z ichiga olmasa, biz shaklda tegishli xabarni ko'rsatamiz. Aks holda, foydalanuvchiga natijalarni ko'rsatadigan OutputSearchResult() protsedurasi chaqiriladi.

Form modulida bir xil nomdagi protsedura yaratamiz va unga kodni yozamiz,

Kod 1C v 8.x protsedurasi DisplaySearchResult()
FormElements.MessageOResult.Value = "Ko'rsatilgan" + String(SearchList.StartingPosition() + 1) + " - " + String(SearchList.StartingPosition() +SearchList.Count()) + "dan" + SearchList.FullCount();
Natija = SearchList.GetDisplay(FullTextSearchDisplayType.HTMLText);
FormElements.SearchResult.SetText(Natija);
AccessibilityButtons();
EndProcedure

Ushbu protseduradagi qadamlar oddiy. Birinchidan, biz qanday elementlar ko'rsatilganligi va jami nechta element topilganligi haqida xabar hosil qilamiz. Keyin biz HTML matn ko'rinishidagi to'liq matnli qidiruv natijasini olamiz va ushbu matnni formada joylashgan HTML hujjat maydoniga ko'rsatamiz.

Nihoyat, biz tugmalarni mavjud qilish yoki aksincha, Oldingi qism va Keyingi qism (natijalarning qaysi qismi ko'rsatilishiga qarab) kirishni taqiqlash uchun boshqaruvni ButtonsAccess() protsedurasiga o'tkazamiz. Ushbu protsedura matni Kodeksda keltirilgan

Code 1C v 8.x Tugmalarga kirish tartibi()
FormElements.NextPortion.Availability = (SearchList.FullCount() - SearchList.StartPosition()) > SearchList.Quantity();
FormElements.PreviousPortion.Availability = (SearchList.StartPosition() > 0);
EndProcedure

Endi PreviousPortion() va NextPortion() tugmalarini bosish uchun hodisa ishlov beruvchilarini yaratishingiz kerak.

Kod 1C v 8.x protsedurasi PrevPartPress(Element)
SearchList.PreviousPart();
PrintSearchResult();
EndProcedure
Protsedura KeyingiBatchClick(element)
SearchList.NextPart();
PrintSearchResult();
EndProcedure

Yakuniy "tegish" shaklda joylashgan HTML hujjat maydonining onclick hodisasi uchun hodisa ishlovchisini yaratish bo'ladi. Haqiqat shundaki, HTML matn sifatida taqdim etilgan to'liq matnli qidiruv natijasi qidiruv ro'yxati elementlarining raqamlariga giperhavolalarni o'z ichiga oladi. Va foydalanuvchi ushbu havolani bosganida tizim ushbu ro'yxat elementidagi ob'ekt shaklini ochishini xohlaymiz. Buning uchun HTML hujjat maydonida joylashgan HTML hujjatning onclick hodisasini tutib olamiz, giperhavoladan ro'yxat elementi raqamini olamiz va mos keladigan ob'ekt shaklini ochamiz. HTML hujjat maydonining onclick hodisasi ishlovchisi matni kodda keltirilgan

Code 1C v 8.x ProcedureSearchResultonclick(Element, pEvtObj)
htmlElement = pEvtObj.srcElement;
// Element identifikatorini tekshiring
Agar (htmlElement.id = "FullTextSearchListItem") keyin
// Fayl nomini oling (qidiruv ro'yxati qatori raqami),
// giperhavolada joylashgan
NumberInList = Number(htmlElement.nameProp);
// Qidiruv ro'yxati qatorini raqam bo'yicha oling
SelectedRow = SearchList[Ro'yxatNumber];
// Topilgan obyektning shaklini oching
OpenValue(SelectedRow.Value);
pEvtObj.returnValue = False;
EndIf;
EndProcedure

QO‘NG‘IROQ

Bu xabarni sizdan oldin o'qiganlar bor.
Eng so'nggi maqolalarni olish uchun obuna bo'ling.
Elektron pochta
Ism
Familiya
Qo'ng'iroqni qanday o'qishni xohlaysiz
Spam yo'q