12.11.2020

Cum să activați căutarea text integral 1s 8.3. Motor de căutare text integral (1Cv8)


Noua funcționalitate de căutare se bazează pe două mecanisme:
- căutare full-text (funcționează foarte rapid și necesită minim resurse de calcul);
- căutarea folosind DBMS (în general, durata căutării și costul resurselor de calcul sunt proporționale cu cantitatea de informații din tabel).

În implementarea curentă, lista va fi căutată fără a folosi căutare full-text în următoarele cazuri ():
- indexul full-text este dezactivat la nivelul bazei de informații;
- obiectul tabelului principal nu este indexat de un index full-text;
- ca urmare a căutării folosind căutarea text integral, a fost primită o eroare.

Dacă căutarea full-text este activată în baza de informații, iar indexul nu este actualizat deloc sau parțial (din experiența mea, 95% din bazele de date cu informații despre clienți), atunci utilizatorul va primi fie un rezultat de căutare nesigur, fie gol în timpul căutării.

Întrebăm compania 1C - ce să facem? Cum să garantezi fiabilitatea rezultatelor căutării în orice moment?
Primim raspunsul: Da, pentru ca rezultatele căutării să fie actualizate atunci când este activată căutarea cu text integral, trebuie să vă asigurați că indexul de căutare cu text integral este actualizat. căutare până în prezent ().

Există măcar un „index de text complet actualizat”? Depinde de numărul de utilizatori, de intensitatea modificărilor informațiilor din baza de date și de frecvența actualizărilor indexului. De obicei, actualizările de index sunt executate la fiecare 60 de secunde. Este bine dacă nu s-au schimbat multe obiecte, iar procedura a reușit să proceseze toate modificările în aceste 60 de secunde. Ce se întâmplă dacă ați reposta un grup de documente sau o rescrie masivă a directorului? În acest caz, nimeni nu poate garanta timpul după care căutarea pe index va oferi din nou date fiabile.
În principiu, acest lucru nu este deosebit de critic, cu excepția câtorva situații. O opțiune comună pentru utilizatori este să setați o selecție în listă cu o anumită valoare, de exemplu, „Cont”, să introduceți unul nou sau să copiați un document existent și să îl scrieți. Cu o căutare veche document nou a fost vizibil instantaneu pe listă. Acum, utilizatorul o va vedea numai după N secunde în cel mai bun caz, unde N este mai aproape de 50-60 de secunde decât de 2-3.
Dacă nu observați că nu există un document nou și furnizați informații cuiva pe baza rezultatelor selectate, atunci va fi evident nesigur.

Acesta a fost cazul când lucrați normal cu baza de informații. Ce se va întâmpla în situații specifice? Permiteți-mi să vă dau câteva exemple.
1) În baza de date de lucru, indexul full-text este activat și actualizat frecvent. Utilizatorul solicită să implementeze o copie a bazei de date de lucru, astfel încât să poată analiza datele.
Restabilim backup-ul și acordăm acces. Dar căutarea full-text nu va funcționa, deoarece... indexul este stocat nu în SGBD, ci în fișiere separate (atât în ​​versiunea fișier, cât și în versiunea client-server). Nu există niciun index în fișierul dt.
aceste. Pentru ca utilizatorul să poată utiliza căutarea în listă, indexul full-text din această bază de date trebuie să fie dezactivat. Adevărat, utilizatorul va fi ușor surprins că căutarea va dura mult mai mult. Sau reconstruiți indexul în întreaga bază de date.

2) (Relevant pentru baze de date mai mult sau mai puțin mari). Baza de date de producție are un index full-text activat și este actualizată frecvent. Vine sfârșitul lunii și începe închiderea perioadei. Începem să încărcăm și să transmitem documente în masă. Pentru a reduce sarcina sistemului, blocăm executarea sarcinilor de rutină și, în consecință, actualizarea indexului se oprește. Utilizatorii vor fi, pentru a spune ușor, perplexi de ce nu există documente noi sau modificate în liste. Singura cale de ieșire este să dezactivați căutarea full-text pentru baza de informații și, în consecință, să puneți o sarcină și mai mare asupra echipamentului datorită unei căutări grele pentru toate detaliile.

Astfel, mi se pare că operațiunea de actualizare a indexului va deveni o altă bătaie de cap pentru administratorii bazei de informații.
Sistemul, care anterior garanta 100% fiabilitatea și relevanța informațiilor în orice moment, se transformă acum într-un sistem de referință în care nu se poate fi complet sigur.
Iar utilizatorii au un alt motiv pentru a le reproșa oamenilor IT - „sistemul dumneavoastră nu funcționează corect”.

Motor de căutare text integral

Capabilități de bază de căutare a textului integral

  • suport pentru transliterare (scrierea cuvintelor rusești folosind caractere latine în conformitate cu GOST);
  • suport pentru substituție (scrierea unei părți a caracterelor în cuvinte rusești cu caractere latine cu o singură cheie);
  • posibilitatea de căutare fuzzy (literele din cuvintele găsite pot diferi) cu indicarea pragului fuzzy;
  • capacitatea de a specifica domeniul de căutare pentru obiectele metadate selectate;
  • prezentarea rezultatelor căutării în format XML și HTML cu evidențierea cuvintelor găsite;
  • indexarea integrală a numelor de câmpuri standard („Cod”, „Nume”, etc.) în toate limbile de configurare;
  • efectuarea unei căutări luând în considerare sinonimele limbilor rusă, engleză și ucraineană;
  • dicționarul morfologic al limbii ruse conține o serie de cuvinte specifice legate de domenii de activitate care sunt automatizate folosind sistemul programului 1C:Enterprise;
  • capacitatea de a utiliza dicționare suplimentare de căutare full-text;
  • Dicționarele furnizate includ baze de date de dicționar și dicționare de tezaur și sinonime din rusă, ucraineană și limbi engleze, furnizat de firma „Informatik”.

Căutare în baza de date text integral

Mecanismul de căutare full-text în datele sistemului 1C:Enterprise 8 vă permite să căutați în baza de date indicând operatori de căutare (ȘI, SAU, NU, URMĂTOR etc.).

Mecanismul de căutare full-text se bazează pe utilizarea a două componente:

  • un index full-text care este creat pentru baza de date curentă și apoi actualizat periodic după cum este necesar;
  • instrumente de căutare full-text.

Crearea și actualizarea unui index full-text se poate face interactiv, în modul 1C:Enterprise 8, sau programatic, folosind limbajul încorporat. Mai jos este dialogul pentru gestionarea indexării textului integral în modul 1C:Enterprise:

Pentru a efectua o căutare a datelor într-o bază de date, de exemplu, poate fi utilizată procesarea Căutare date prezentată mai jos.

În exemplul prezentat, au fost găsite documente ale căror detalii conțin valori care încep cu „Kompl” și „vent” - contrapartea „Kompletk TD” și detalii care conțin diferite forme ale cuvântului „ventilator”.

Sistemul 1C:Enterprise 8 permite includerea selectivă a datelor obiectului aplicației și a detaliilor acestora într-o căutare full-text. De asemenea, este posibil să se limiteze domeniul de căutare doar la obiectele de configurare specificate.

Căutare text integral în sistemul de ajutor

ÎN sistem de ajutor 1C:Enterprise 8 implementează și căutarea full-text, care vă permite să utilizați operatori de căutare AND, OR, NOT, NEXT etc. În acest caz, cuvintele găsite sunt evidențiate.

Interfață software

Sunt utilizate următoarele obiecte de aplicație:

  • Manager de căutare text integral
  • Lista Căutare Fulltext
  • FullTextSearchListElement

Managerul de căutare în text complet are metode pentru construirea unui index de căutare, verificarea relevanței acestuia și, de asemenea, crearea unei liste de căutare de tip Lista de căutare în text complet pentru o anumită interogare.

Managerul FullTextSearch este disponibil ca o proprietate a contextului global FullTextSearch.

Lista FullTextSearch oferă acces la rezultatele căutării. De asemenea, puteți specifica domeniul de căutare ca o serie de elemente de metadate de configurare.

Rezultatul căutării este un FullTextSearchListElement.

Operatori de șir de căutare

Următorii operatori de căutare pot fi utilizați în linia de introducere:

ȘI (ȘI sau #) - căutați date care conțin toate cuvintele; exemplu: „înregistrare ȘI document” - detaliile trebuie să conțină atât „conduită”, cât și „document” (ținând cont de morfologie);

SAU (SAU sau | sau,) - caută cel puțin un cuvânt dintre cele enumerate; exemplu: „înregistrare SAU document” - detaliile trebuie să conțină cel puțin unul dintre cuvintele „înregistrare” sau „document”;

NOT (NOT sau ~) - caută date ale căror detalii conțin primul cuvânt, dar nu și al doilea; exemplu: „închidere NU lună” - va fi găsit tot ce conține „închidere”, dar care nu conține cuvântul „lună”. Utilizarea „~” la începutul unei linii nu este permisă;

NEAR/n (NEAR/[+/-]n) - caută date care conțin cuvintele specificate într-un singur atribut, ținând cont de morfologia la o distanță de n cuvinte între cuvinte.

Semnul indică în ce direcție de la primul cuvânt va fi căutat al doilea cuvânt ("+" - după primul; "-" - înainte de primul cuvânt).

Dacă semnul nu este specificat, atunci vor fi găsite date care conțin cuvintele specificate la o distanță de n cuvinte unul de celălalt.

Ordinea cuvintelor nu contează.

  • „uscător de păr NEAR/3 aer” - se vor găsi date în care „aerul” nu este mai mult de 3 cuvinte înainte sau după „uscător de păr”;
  • uscător de păr NEAR/+3 aer - se vor găsi date în care „aer” nu este mai mult de 3 cuvinte după „uscător de păr”;
  • uscător de păr NEAR/-3 aer - se vor găsi date în care „aer” este cu cel mult 3 cuvinte înainte de „uscător de păr”.

NEAR - operator de distanță simplificat: ambele cuvinte sunt situate la cel mult 8 cuvinte unul de celălalt; exemplu: „deținerea documentului NEAR”;

"" (text între ghilimele) - caută o frază exactă ținând cont de morfologie, exemplu: "postarea unui document" - echivalent cu: postarea /1 document;

() - grupare de cuvinte (orice număr de niveluri de imbricare); exemplu: „(înregistrare | declarație) # (cont, document)”;

* - căutați folosind un wildcard (înlocuind sfârșitul unui cuvânt). Trebuie introdus mai mult de 1 simbol semnificativ; exemplu: „doc*” - va găsi „document”, „document”, „documentar”, etc.;

# - căutare neclară pentru cuvinte cu un număr specificat de diferențe față de numărul specificat (dacă nu este specificat, atunci = 1); exemplu: interogarea „#System” va găsi „sistama”, „sivtema”; interogarea „System#2” va găsi „sittama”, „settema”;

Căutați luând în considerare sinonimele limbilor rusă, engleză și ucraineană. "!" este plasat înaintea cuvântului corespunzător; exemplu: căutarea „! țiglă roșie” va găsi, de asemenea, „tigla stacojie” și „tigla coral”.

Dacă nu sunt specificati operatori (cuvintele sunt tastate separate prin spații), atunci programul caută toate cuvintele din interogare folosind operatorul AND.

Exemple

SearchList = FullTextSearch.CreateList("", 20); SearchList.GetDescription = Adevărat;

ArrayMD = New Array(); ArrayMD.Add(Metadate.Directorii.Produse); ArrayMD.Add(Metadate.Documents.CashReceipt);

SearchList.SearchArea = ArrayMD; SearchList.SearchString = SearchInputField; SearchList.PortionSize = PortionSize; SearchList.FirstPart();

If SearchList.FullQuantity() = 0 Then If SearchList.TooManyResults() Then Warning ("Prea multe rezultate, vă rugăm să vă rafinați interogarea.");

endIf;

Reveni; endIf;

Cantitate = SearchList.FullQuantity();

HTMLStr = SearchList.GetDisplay(FullTextSearchDisplayType.HTMLText); Raport (StrHTML);

Pentru fiecare index = 0 By SearchList.Quantity-1 Loop element = SearchList.Get(index);

Raport (articol.Vizualizare); EndCycle;

Particularități

Căutarea full-text funcționează în întreaga matrice de date, așa că atunci când o utilizați, trebuie să treceți rezultatul printr-un filtru de securitate. De exemplu, într-un sistem cu mai multe baze, trebuie să tăiați obiectele din alte baze de date. În plus, o astfel de filtrare se intersectează îndeaproape cu controlul accesului. Se știe că de foarte multe ori mecanismele de căutare sunt „gaura” în securitate. Căutare text integral - vă va permite să găsiți informații text

, plasat aproape oriunde în configurația utilizată. În acest caz, puteți căuta datele necesare fie în întreaga configurație în ansamblu, fie prin restrângerea zonei de căutare la mai multe obiecte (de exemplu,

  • anumite tipuri
  • Există suport pentru substituție (scrierea unei părți a caracterelor în cuvinte rusești cu caractere latine cu o singură cheie). Exemplu: „russrfz frapf” (terminările fiecărui cuvânt sunt tastate cu litere latine, de exemplu, ca urmare a unei erori de operator).
  • Există o posibilitate de căutare neclară (literele din cuvintele găsite pot diferi) cu indicarea pragului neclar. Exemplu: prin specificarea cuvântului „hello” în bara de căutare și o vagitate de 17%, vom găsi toate cuvintele similare cu și fără erori: „hello”, „prevet”, „prived”.
  • Este posibil să specificați domeniul de aplicare al căutării pentru obiectele metadate selectate.
  • Indexarea integrală a numelor de câmpuri standard („Cod”, „Nume”, etc.) se realizează în toate limbile de configurare.
  • Căutarea se efectuează ținând cont de sinonimele limbilor rusă, engleză și ucraineană.
  • Dicționarul morfologic al limbii ruse conține o serie de cuvinte specifice legate de domenii de activitate care sunt automatizate folosind sistemul programului 1C:Enterprise.
  • Ca standard, dicționarele furnizate includ baze de date de dicționar și dicționare de tezaur și sinonime din limbile rusă, ucraineană și engleză, care sunt furnizate de compania Informatik.
  • Căutarea poate fi efectuată folosind caractere wildcard ("*"), precum și specificarea operatorilor de căutare ("ȘI", "SAU", "NU", "URMĂTOR") și caractere speciale.

Căutarea full-text poate fi efectuată în orice configurație pe platforma 1C:Enterprise 8

Pentru a deschide fereastra de control a căutării cu text integral, procedați în felul următor:

Aplicare regulată- element de meniu Operațiuni - Gestionarea căutării text integral.

Aplicație gestionată- element de meniu Meniul principal - Toate funcțiile - Standard -Gestionarea căutării text integral.


  • Actualizați indexul– Crearea indexului/Actualizarea indexului;
  • Ștergeți indexul– resetarea indexului (recomandat după actualizarea tuturor datelor);
  • element Permite îmbinarea indexului– este responsabil pentru îmbinarea indexului principal și suplimentar.

Căutarea full-text se efectuează folosind un index full-text. Fără un index, căutarea integrală ca atare nu este posibilă. Pentru ca o căutare să fie eficientă, toate datele relevante trebuie incluse în indexul cu text integral. Dacă utilizatorul introduce date noi în baza de date, acestea trebuie incluse în indexul în cauză, altfel nu va participa la căutare. Pentru a evita acest lucru, trebuie să actualizați indexul full-text. La actualizare, sistemul analizează doar anumite tipuri de date: șir, date de tip Referință (legături către documente, directoare), număr, dată, stocare valori. Dacă utilizatorul nu are drepturi de acces la anumite informații, atunci nu le va putea vedea în rezultatele căutării. De asemenea, trebuie să rețineți că în proprietățile obiectelor pentru care va avea loc căutarea trebuie setată valoarea Căutare text integral – Utilizare, care este setat implicit.

Cum puteți observa proprietatea Utilizare setată pentru întregul director Contrapartide, dar acest lucru se poate face pentru fiecare dintre atributele sale de tipul corespunzător.

Să aruncăm o privire mai atentă la indexul full-text, care constă din două părți (indexuri): indexul principal și cel suplimentar. Viteza mare de recuperare a datelor este asigurată de indexul principal, dar actualizarea acestuia este relativ lentă, în funcție de volumul de date. Indicele suplimentar este opusul acestuia. Datele sunt adăugate mult mai rapid, dar căutarea este mai lentă. Sistemul caută simultan în ambii indici. Majoritatea datelor se află în indexul principal, iar datele adăugate în sistem intră în indexul suplimentar. În timp ce cantitatea de date din indexul suplimentar este mică, căutarea prin el este relativ rapidă. Într-un moment în care încărcarea sistemului este ușoară, are loc o operație de îmbinare a indexului, în urma căreia indexul suplimentar este șters și toate datele sunt plasate în indexul principal. Este de preferat să efectuați îmbinarea indexului într-un moment în care încărcarea sistemului este minimă. În acest scop, puteți crea sarcini reglementate și sarcini programate.

Operatori speciali sunt permisi atunci când se specifică o expresie de căutare

Mecanismul de căutare full-text permite ca unele caractere ale unui cuvânt rusesc să fie scrise cu caractere latine cu o singură cheie. Rezultatul căutării nu se va modifica.

Doi operatori NEXT

  • simplificat. 8 cuvinte una de alta
  • NEAR/[+/-]n – caută date într-un singur atribut la o distanță de n-1 cuvinte între ele.

Semnul indică în ce direcție din primul cuvânt va fi căutat al doilea cuvânt. (+ - după, - înainte)

Caracterul „*” poate fi folosit doar ca înlocuitor pentru sfârșitul unui cuvânt

Operatorul de neclaritate „#”. Dacă ortografia exactă a numelui, numele este necunoscut.

Software și instrumente 1C: programare.

Operator sinonim "!" Vă permite să găsiți un cuvânt și sinonimele acestuia

Cum se actualizează în mod programatic un index de căutare text integral?

Cod 1C v 8.x Procedura UpdateIndices() Export
FulltextSearch.UpdateIndex();
Sfârșitul procedurii

Exemplu de căutare de date text integral

Definirea variabilei SearchList

Cod 1C v 8.x Lista de căutare variabile;

În plus, în procedura de procesare a evenimentului Când se deschide formularul, vom determina că această variabilă va conține o listă de căutare full-text, cu ajutorul căreia vom căuta datele

Cod 1C v 8.x Procedura OnOpen()
SearchList = FullTextSearch.CreateList();
Sfârșitul procedurii

Acum, în cazul în care facem clic pe butonul Find, vom scrie cod care ne va permite să efectuăm o căutare în conformitate cu expresia specificată în câmpul SearchExpression

Cod 1C v 8.x Procedura FindClick(Element)
SearchList.SearchString = SearchExpression;
Încercare
SearchList.FirstPart();
Excepţie
Avertisment(Descrierea erorii());
EndTempt;
Dacă SearchList.FullQuantity() = 0, atunci
Form Elements.MessageOfResult.Value = "Nu a fost găsit";
Form Elements.SearchResult.SetText("");
Altfel
OutputSearchResult();
endIf;
Sfârșitul procedurii

În primul rând, în această procedură, setăm termenul de căutare introdus de utilizator ca șir de căutare pentru căutarea full-text. Apoi executăm metoda FirstPart(), care lansează de fapt o căutare full-text și returnează prima porțiune de rezultate. În mod implicit, o bucată conține 20 de elemente. După aceea, analizăm numărul de elemente din lista de căutare. Dacă nu conține niciun element, atunci afișăm un mesaj corespunzător în formular. În caz contrar, este apelată procedura DisplaySearchResult(), care afișează rezultatele utilizatorului.

Să creăm o procedură cu același nume în modulul formular și să scriem codul în ea:

Cod 1C v 8.x Procedură OutputSearchResult()
Form Elements.ResultMessage.Value = "Afișat" + Row(SearchList.InitialPosition() + 1) + " - " + Row(SearchList.InitialPosition() +SearchList.Quantity()) + " din " + SearchList.FullQuantity() ;
Rezultat = SearchList.GetDisplay(FullTextSearchDisplayType.HTMLText);
FormElements.SearchResult.SetText(Result);
ButtonAvailability();
Sfârșitul procedurii

Pașii din această procedură sunt simpli. În primul rând, generăm un mesaj despre ce elemente sunt afișate și câte elemente totale au fost găsite. Apoi obținem rezultatul căutării full-text sub formă de text HTML și afișăm acest text în câmpul document HTML aflat în formular.

În cele din urmă, transferăm controlul către procedura Button Availability() pentru a pune la dispoziție sau, dimpotrivă, a refuza accesul la butoanele Previous Portion și Next Portion (în funcție de ce porțiune din rezultatele obținute este afișată). Textul acestei proceduri este prezentat în Cod

Codul 1C v 8.x Disponibilitatea butonului de procedură ()
Form Elements.NextPosition.Availability = (SearchList.FullQuantity() - SearchList.StartPosition()) > SearchList.Quantity();
Form Elements.PreviousPosition.Availability = (SearchList.StartPosition() > 0);
Sfârșitul procedurii

Acum trebuie să creați handlere de evenimente pentru a face clic pe butoanele PreviousPart() și NextPart().

Cod 1C v 8.x Procedură Apăsare porțiune anterioară (Element)
SearchList.PreviousPart();
OutputSearchResult();
Sfârșitul procedurii
Procedura Apăsarea următoarei porțiuni (Element)
SearchList.NextPart();
OutputSearchResult();
Sfârșitul procedurii

„Atingerea” finală este crearea unui handler de evenimente onclick pentru câmpul documentului HTML aflat în formular. Faptul este că rezultatul unei căutări full-text, prezentat sub formă de text HTML, conține hyperlinkuri către numărul de elemente din lista de căutare. Și ne-am dori ca atunci când utilizatorul face clic pe acest link, sistemul să deschidă forma obiectului care este conținut în acest element de listă. Pentru a face acest lucru, vom intercepta evenimentul onclick al documentului HTML conținut în câmpul document HTML, vom obține numărul articolului din listă din hyperlink și vom deschide formularul obiectului corespunzător. Textul handler-ului de evenimente onclick al unui câmp de document HTML este prezentat în cod

Cod 1C v 8.x Procedură Căutare Rezultat(Element, pEvtObj)
htmlElement = pEvtObj.srcElement;
// Verificați id-ul elementului
Dacă (htmlElement.id = "FullTextSearchListItem") Atunci
// Obține numele fișierului (numărul liniei din lista de căutare),
// conținut în hyperlink
NumberInList = Number(htmlElement.nameProp);
// Obține șirul listei de căutare după număr
SelectedRow = SearchList[NumberInList];
// Deschideți forma obiectului găsit
OpenValue(SelectedRow.Value);
pEvtObj.returnValue = Fals;
endIf;
Sfârșitul procedurii

Căutarea full-text funcționează în întreaga matrice de date, așa că atunci când o utilizați, trebuie să treceți rezultatul printr-un filtru de securitate.- vă va permite să găsiți informații text situate aproape oriunde în configurația utilizată. În acest caz, puteți căuta datele necesare fie în întreaga configurație în ansamblu, fie prin restrângerea zonei de căutare la mai multe obiecte (de exemplu, anumite tipuri de documente sau directoare). Criteriile de căutare în sine pot varia într-o gamă destul de largă. Adică puteți găsi datele necesare fără să vă amintiți exact unde sunt stocate în configurație și cum exact au fost înregistrate.

, plasat aproape oriunde în configurația utilizată. În acest caz, puteți căuta datele necesare fie în întreaga configurație în ansamblu, fie prin restrângerea zonei de căutare la mai multe obiecte (de exemplu,

  • anumite tipuri
  • Există suport pentru substituție (scrierea unei părți a caracterelor în cuvinte rusești cu caractere latine cu o singură cheie). Exemplu: „russrfz frapf” (terminările fiecărui cuvânt sunt tastate cu litere latine, de exemplu, ca urmare a unei erori de operator).
  • Există o posibilitate de căutare neclară (literele din cuvintele găsite pot diferi) cu indicarea pragului neclar. Exemplu: prin specificarea cuvântului „hello” în bara de căutare și o vagitate de 17%, vom găsi toate cuvintele similare cu și fără erori: „hello”, „prevet”, „prived”.
  • Este posibil să specificați domeniul de aplicare al căutării pentru obiectele metadate selectate.
  • Indexarea integrală a numelor de câmpuri standard („Cod”, „Nume”, etc.) se realizează în toate limbile de configurare.
  • Căutarea se efectuează ținând cont de sinonimele limbilor rusă, engleză și ucraineană.
  • Dicționarul morfologic al limbii ruse conține o serie de cuvinte specifice legate de domenii de activitate care sunt automatizate folosind sistemul programului 1C:Enterprise.
  • Ca standard, dicționarele furnizate includ baze de date de dicționar și dicționare de tezaur și sinonime din limbile rusă, ucraineană și engleză, care sunt furnizate de compania Informatik.
  • Căutarea poate fi efectuată folosind caractere wildcard ("*"), precum și specificarea operatorilor de căutare ("ȘI", "SAU", "NU", "URMĂTOR") și caractere speciale.

Căutarea full-text poate fi efectuată în orice configurație pe platforma 1C:Enterprise 8

Pentru a deschide fereastra de control a căutării cu text integral, procedați în felul următor:

Aplicare regulată- element de meniu Operațiuni - Gestionarea căutării text integral.

Aplicație gestionată- element de meniu Meniul principal - Toate funcțiile - Standard -Gestionarea căutării text integral.


  • Actualizați indexul– Crearea indexului/Actualizarea indexului;
  • Ștergeți indexul– resetarea indexului (recomandat după actualizarea tuturor datelor);
  • element Permite îmbinarea indexului– este responsabil pentru îmbinarea indexului principal și suplimentar.

Căutarea full-text se efectuează folosind un index full-text. Fără un index, căutarea integrală ca atare nu este posibilă. Pentru ca o căutare să fie eficientă, toate datele relevante trebuie incluse în indexul cu text integral. Dacă utilizatorul introduce date noi în baza de date, acestea trebuie incluse în indexul în cauză, altfel nu va participa la căutare. Pentru a evita acest lucru, trebuie să actualizați indexul full-text. La actualizare, sistemul analizează doar anumite tipuri de date: șir, date de tip Referință (legături către documente, directoare), număr, dată, stocare valori. Dacă utilizatorul nu are drepturi de acces la anumite informații, atunci nu le va putea vedea în rezultatele căutării. De asemenea, trebuie să rețineți că în proprietățile obiectelor pentru care va avea loc căutarea trebuie setată valoarea Căutare text integral – Utilizare, care este setat implicit.

Cum puteți observa proprietatea Utilizare setată pentru întregul director Contrapartide, dar acest lucru se poate face pentru fiecare dintre atributele sale de tipul corespunzător.

Să aruncăm o privire mai atentă la indexul full-text, care constă din două părți (indexuri): indexul principal și cel suplimentar. Viteza mare de recuperare a datelor este asigurată de indexul principal, dar actualizarea acestuia este relativ lentă, în funcție de volumul de date. Indicele suplimentar este opusul acestuia. Datele sunt adăugate mult mai rapid, dar căutarea este mai lentă. Sistemul caută simultan în ambii indici. Majoritatea datelor se află în indexul principal, iar datele adăugate în sistem intră în indexul suplimentar. În timp ce cantitatea de date din indexul suplimentar este mică, căutarea prin el este relativ rapidă. Într-un moment în care încărcarea sistemului este ușoară, are loc o operație de îmbinare a indexului, în urma căreia indexul suplimentar este șters și toate datele sunt plasate în indexul principal. Este de preferat să efectuați îmbinarea indexului într-un moment în care încărcarea sistemului este minimă. În acest scop, puteți crea sarcini reglementate și sarcini programate.

Operatori speciali sunt permisi atunci când se specifică o expresie de căutare

Mecanismul de căutare full-text permite ca unele caractere ale unui cuvânt rusesc să fie scrise cu caractere latine cu o singură cheie. Rezultatul căutării nu se va modifica.

Doi operatori NEXT

  • simplificat. 8 cuvinte una de alta
  • NEAR/[+/-]n – caută date într-un singur atribut la o distanță de n-1 cuvinte între ele.

Semnul indică în ce direcție din primul cuvânt va fi căutat al doilea cuvânt. (+ - după, - înainte)

Caracterul „*” poate fi folosit doar ca înlocuitor pentru sfârșitul unui cuvânt

Operatorul de neclaritate „#”. Dacă ortografia exactă a numelui, numele este necunoscut.

Software și instrumente 1C: programare.

Operator sinonim "!" Vă permite să găsiți un cuvânt și sinonimele acestuia

Cum se actualizează în mod programatic un index de căutare text integral?

Cod 1C v 8.x Procedura UpdateIndices() Export
FulltextSearch.UpdateIndex();
Sfârșitul procedurii

Exemplu de căutare de date text integral

Definirea variabilei SearchList

Cod 1C v 8.x Lista de căutare variabile;

În plus, în procedura de procesare a evenimentului Când se deschide formularul, vom determina că această variabilă va conține o listă de căutare full-text, cu ajutorul căreia vom căuta datele

Cod 1C v 8.x Procedura OnOpen()
SearchList = FullTextSearch.CreateList();
Sfârșitul procedurii

Acum, în cazul în care facem clic pe butonul Find, vom scrie cod care ne va permite să efectuăm o căutare în conformitate cu expresia specificată în câmpul SearchExpression

Cod 1C v 8.x Procedura FindClick(Element)
SearchList.SearchString = SearchExpression;
Încercare
SearchList.FirstPart();
Excepţie
Avertisment(Descrierea erorii());
EndTempt;
Dacă SearchList.FullQuantity() = 0, atunci
Form Elements.MessageOfResult.Value = "Nu a fost găsit";
Form Elements.SearchResult.SetText("");
Altfel
OutputSearchResult();
endIf;
Sfârșitul procedurii

În primul rând, în această procedură, setăm termenul de căutare introdus de utilizator ca șir de căutare pentru căutarea full-text. Apoi executăm metoda FirstPart(), care lansează de fapt o căutare full-text și returnează prima porțiune de rezultate. În mod implicit, o bucată conține 20 de elemente. După aceea, analizăm numărul de elemente din lista de căutare. Dacă nu conține niciun element, atunci afișăm un mesaj corespunzător în formular. În caz contrar, este apelată procedura DisplaySearchResult(), care afișează rezultatele utilizatorului.

Să creăm o procedură cu același nume în modulul formular și să scriem codul în ea:

Cod 1C v 8.x Procedură OutputSearchResult()
Form Elements.ResultMessage.Value = "Afișat" + Row(SearchList.InitialPosition() + 1) + " - " + Row(SearchList.InitialPosition() +SearchList.Quantity()) + " din " + SearchList.FullQuantity() ;
Rezultat = SearchList.GetDisplay(FullTextSearchDisplayType.HTMLText);
FormElements.SearchResult.SetText(Result);
ButtonAvailability();
Sfârșitul procedurii

Pașii din această procedură sunt simpli. În primul rând, generăm un mesaj despre ce elemente sunt afișate și câte elemente totale au fost găsite. Apoi obținem rezultatul căutării full-text sub formă de text HTML și afișăm acest text în câmpul document HTML aflat în formular.

În cele din urmă, transferăm controlul către procedura Button Availability() pentru a pune la dispoziție sau, dimpotrivă, a refuza accesul la butoanele Previous Portion și Next Portion (în funcție de ce porțiune din rezultatele obținute este afișată). Textul acestei proceduri este prezentat în Cod

Codul 1C v 8.x Disponibilitatea butonului de procedură ()
Form Elements.NextPosition.Availability = (SearchList.FullQuantity() - SearchList.StartPosition()) > SearchList.Quantity();
Form Elements.PreviousPosition.Availability = (SearchList.StartPosition() > 0);
Sfârșitul procedurii

Acum trebuie să creați handlere de evenimente pentru a face clic pe butoanele PreviousPart() și NextPart().

Cod 1C v 8.x Procedură Apăsare porțiune anterioară (Element)
SearchList.PreviousPart();
OutputSearchResult();
Sfârșitul procedurii
Procedura Apăsarea următoarei porțiuni (Element)
SearchList.NextPart();
OutputSearchResult();
Sfârșitul procedurii

„Atingerea” finală este crearea unui handler de evenimente onclick pentru câmpul documentului HTML aflat în formular. Faptul este că rezultatul unei căutări full-text, prezentat sub formă de text HTML, conține hyperlinkuri către numărul de elemente din lista de căutare. Și ne-am dori ca atunci când utilizatorul face clic pe acest link, sistemul să deschidă forma obiectului care este conținut în acest element de listă. Pentru a face acest lucru, vom intercepta evenimentul onclick al documentului HTML conținut în câmpul document HTML, vom obține numărul articolului din listă din hyperlink și vom deschide formularul obiectului corespunzător. Textul handler-ului de evenimente onclick al unui câmp de document HTML este prezentat în cod

Cod 1C v 8.x Procedură Căutare Rezultat(Element, pEvtObj)
htmlElement = pEvtObj.srcElement;
// Verificați id-ul elementului
Dacă (htmlElement.id = "FullTextSearchListItem") Atunci
// Obține numele fișierului (numărul liniei din lista de căutare),
// conținut în hyperlink
NumberInList = Number(htmlElement.nameProp);
// Obține șirul listei de căutare după număr
SelectedRow = SearchList[NumberInList];
// Deschideți forma obiectului găsit
OpenValue(SelectedRow.Value);
pEvtObj.returnValue = Fals;
endIf;
Sfârșitul procedurii


2024
newmagazineroom.ru - Declarații contabile. UNVD. Salariul si personalul. Tranzacții valutare. Plata taxelor. CUVĂ. Primele de asigurare