Koko tekstihaun hallinta. Kokotekstihakukone (1Cv8). Koko tekstitietokannan haku

Koko tekstin hakukone

Koko tekstin perushakuominaisuudet

  • translitterointituki (venäläisten sanojen kirjoittaminen latinalaisilla kirjaimilla GOST:n mukaisesti);
  • korvaamisen tuki (osien merkkien kirjoittaminen venäläisillä sanoilla yhden näppäimen latinalaisilla merkeillä);
  • sumean haun mahdollisuus (löytyneiden sanojen kirjaimet voivat vaihdella) ja sumean kynnyksen merkintä;
  • kyky määrittää hakualue valituille metatieto-objekteille;
  • hakutulosten esittäminen XML- ja HTML-muodossa löydettyjen sanojen korostamalla;
  • standardien kenttänimien ("Koodi", "Nimi" jne.) kokotekstiindeksointi kaikilla konfigurointikielillä;
  • haun suorittaminen ottaen huomioon venäjän, englannin ja ukrainan kielten synonyymit;
  • venäjän kielen morfologinen sanakirja sisältää joukon erityisiä sanoja, jotka liittyvät toiminta-alueisiin, jotka on automatisoitu 1C:Enterprise-ohjelmajärjestelmällä;
  • kyky käyttää muita kokotekstihakusanakirjoja;
  • Toimitetut sanakirjat sisältävät Informatik-yrityksen toimittamia sanakirjatietokantoja ja synonyymisanastoja venäjän, ukrainan ja englannin kielelle.

Koko tekstitietokannan haku

1C:Enterprise 8 -järjestelmän tietojen täystekstihakumekanismin avulla voit etsiä tietokannasta hakuoperaattoreita (AND, OR, NOT, NEXT jne.).

Kokotekstihakumekanismi perustuu kahden komponentin käyttöön:

  • kokotekstihakemisto, joka luodaan nykyiselle tietokannalle ja päivitetään sitten säännöllisesti tarpeen mukaan;
  • kokotekstihakutyökalut.

Täystekstihakemiston luominen ja päivittäminen voidaan tehdä interaktiivisesti, 1C:Enterprise 8 -tilassa tai ohjelmallisesti sisäänrakennetun kielen avulla. Alla on valintaikkuna koko tekstin indeksoinnin hallintaan 1C:Enterprise-tilassa:

Tiedonhaun suorittamiseen tietokannasta voidaan esimerkiksi käyttää alla esitettyä Data Search -käsittelyä.

Esitetyssä esimerkissä löydettiin asiakirjoja, joiden tiedot sisältävät arvoja, jotka alkavat "Kompl" ja "vent" - vastapuoli "Kompletk TD" ja yksityiskohdat, jotka sisältävät sanan "ventilator" eri muotoja.

1C:Enterprise 8 -järjestelmä mahdollistaa sovellusobjektitietojen ja niiden yksityiskohtien valikoivan sisällyttämisen koko tekstihakuun. On myös mahdollista rajoittaa hakualue vain määritettyihin konfigurointiobjekteihin.

Koko tekstihaku ohjejärjestelmästä

1C:Enterprise 8 -apujärjestelmä toteuttaa myös kokotekstihaun, jonka avulla voit käyttää hakuoperaattoreita AND, OR, NOT, NEXT jne. Tässä tapauksessa löydetyt sanat korostetaan.

Ohjelmistoliittymä

Käytetään seuraavia sovellusobjekteja:

  • Koko tekstihaun hallinta
  • Fulltext Search List
  • FullTextSearchListElement

Täystekstihaun hallinnassa on menetelmiä hakuindeksin muodostamiseen, sen osuvuuden tarkistamiseen ja myös kokotekstihakuluettelotyypin hakuluettelon luomiseen tietylle kyselylle.

FullTextSearch Manager on saatavilla maailmanlaajuisen FullTextSearch-kontekstin ominaisuutena.

FullTextSearch-luettelo tarjoaa pääsyn hakutuloksiin. Voit myös määrittää hakualueen kokoonpanon metatietoelementtien joukkona.

Hakutulos on FullTextSearchListElement.

Hae merkkijonooperaattoreita

Seuraavia hakuoperaattoreita voidaan käyttää syöttörivillä:

JA (JA tai #) - etsi kaikki sanat sisältävät tiedot; esimerkki: "tietue AND asiakirja" - tiedoissa on oltava sekä "käyttäytyminen" että "asiakirja" (ottaen huomioon morfologia);

TAI (OR tai | tai,) - etsi vähintään yksi sana listatuista; esimerkki: "tietue TAI asiakirja" - tiedoissa on oltava vähintään yksi sanoista "tietue" tai "asiakirja";

EI (NOT tai ~) - etsi tietoja, joiden tiedot sisältävät ensimmäisen sanan, mutta eivät toista; esimerkki: "sulkeminen EI kuukausi" - kaikki, joka sisältää sanan "sulkeminen", mutta ei sanaa "kuukausi", löytyy. "~":n käyttö rivin alussa ei ole sallittua;

NEAR/n (NEAR/[+/-]n) - etsi dataa, joka sisältää määritetyt sanat yhdessä attribuutissa, ottaen huomioon morfologian n sanan etäisyydellä sanojen välillä.

Merkki osoittaa, mihin suuntaan ensimmäisestä sanasta alkaen toista sanaa etsitään ("+" - ensimmäisen jälkeen; "-" - ennen ensimmäistä sanaa).

Jos merkkiä ei ole määritetty, löydetään tiedot, jotka sisältävät määritetyt sanat n sanan etäisyydellä toisistaan.

Sanojen järjestyksellä ei ole väliä.

  • "hiustenkuivain LÄHELLÄ/3 ilmaa" - löytyy tiedot, joissa "ilma" on enintään 3 sanaa ennen "hiustenkuivaajaa" tai sen jälkeen;
  • hiustenkuivaaja LÄHELLÄ/+3 ilmaa - löytyy tiedot, joissa "ilma" on enintään 3 sanaa "hiustenkuivaaja" jälkeen;
  • hiustenkuivaaja LÄHELLÄ/-3 ilmaa - löytyy tiedot, joissa "ilma" on enintään 3 sanaa ennen "hiustenkuivaaja".

NEAR - yksinkertaistettu etäisyysoperaattori: molemmat sanat sijaitsevat enintään 8 sanan päässä toisistaan; esimerkki: "holding document NEAR";

"" (teksti lainausmerkeissä) - etsi tarkkaa lausetta ottaen huomioon morfologian, esimerkki: "asiakirjan kirjaaminen" - vastaa: lähetys /1 asiakirja;

() - sanojen ryhmittely (mikä tahansa määrä sisäkkäisiä tasoja); esimerkki: "(kirjaus | tiliote) # (tili, asiakirja)";

* - Hae yleismerkillä (korvaa sanan lopun). Enemmän kuin 1 merkitsevä merkki on syötettävä; esimerkki: "asiakirja*" - löytää "asiakirjan", "dokumentin", "dokumentin" jne.;

# - sumea haku sanoille, joilla on tietty määrä eroja määritetystä numerosta (jos ei ole määritetty, niin = 1); esimerkki: kysely "#System" löytää "sistama", "sivtema"; kysely "System#2" löytää "sittama", "settema";

Hae ottaen huomioon venäjän, englannin ja ukrainan kielten synonyymit. "!" sijoitetaan vastaavan sanan eteen; Esimerkki: "!punainen laatta" etsii myös "scarlet tile" ja "coral tile".

Jos operaattoreita ei ole määritetty (sanat kirjoitetaan välilyönnillä erotettuina), niin ohjelma etsii kaikki kyselyn sanat AND-operaattorilla.

Esimerkkejä

Hakulista = FullTextSearch.CreateList("", 20); SearchList.GetDescription = Tosi;

ArrayMD = Uusi Array(); ArrayMD.Add(Metadata.Directories.Products); ArrayMD.Add(Metadata.Documents.CashReceipt);

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

If SearchList.FullQuantity() = 0 Then If SearchList.TooManyResults() Then Warning("Liian monta tulosta, tarkenna kyselyäsi.");

endIf;

Palata; endIf;

Määrä = SearchList.FullQuantity();

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

Jokaiselle indeksille = 0 Hakulistalla.Määrä-1 Silmukkaelementti = SearchList.Get(index);

Raportti(tuote.Näytä); EndCycle;

Erikoisuudet

Tähän asti harvat tietävät, että versiosta 8.1 alkaen 1C:Enterprise-alustalla on upea ja erittäin hyödyllinen mekanismi - koko tekstihaku. Mikä se on? Kuinka siitä voi olla hyötyä sinulle? Näihin kysymyksiin vastataan artikkelissa V.V. Kalastus, yritys "1C".

Ensinnäkin muutama sana siitä, millainen mekanismi tämä on. Koko tekstihaku, yksinkertaisella sanalla, antaa sinun löytää tekstitietoja, jotka sijaitsevat melkein missä tahansa käytetyssä kokoonpanossa. Tässä tapauksessa voit etsiä tarvittavia tietoja joko koko kokoonpanosta kokonaisuutena tai rajaamalla hakualueen useisiin objekteihin (esimerkiksi tietyntyyppisiin asiakirjoihin tai hakemistoihin). Itse hakukriteerit voivat vaihdella melko laajalla alueella. Toisin sanoen voit löytää tarvittavat tiedot edes muistamatta tarkalleen, missä ne on tallennettu kokoonpanoon ja kuinka tarkalleen ne on tallennettu.

Koko tekstihaku tarjoaa seuraavat vaihtoehdot.

  1. On olemassa tuki translitteraatiolle (venäläisten sanojen kirjoittaminen latinalaisilla kirjaimilla GOST 7.79-2000:n mukaisesti). Esimerkki: "venäläinen lause" = "russkaya fraza".
  2. Korvaustuki (osien merkkien kirjoittaminen venäjänkielisillä sanoilla yhden näppäimen latinalaisilla merkeillä). Esimerkki: "russrfz frapf" (kunkin sanan päätteet kirjoitetaan latinalaisin kirjaimin esimerkiksi operaattorivirheen seurauksena).
  3. On mahdollista tehdä sumea haku (löytyneiden sanojen kirjaimet voivat poiketa toisistaan) sumean kynnyksen osoituksella. Esimerkki: määrittämällä hakupalkkiin sana "hello" ja epämääräisyyden 17%, löydämme kaikki samankaltaiset sanat virheineen ja ilman: "hello", "prevet", "prived".
  4. Valittujen metatieto-objektien haun laajuus on mahdollista määrittää.
  5. Standardikenttien nimien ("Koodi", "Nimi" jne.) kokoteksti-indeksointi suoritetaan kaikilla konfigurointikielillä.
  6. Haku suoritetaan ottaen huomioon venäjän, englannin ja ukrainan kielten synonyymit.
  7. Venäjän kielen morfologinen sanakirja sisältää useita erityisiä sanoja, jotka liittyvät toiminta-alueisiin, jotka on automatisoitu 1C:Enterprise-ohjelmajärjestelmällä.
  8. Toimitetut sanakirjat sisältävät vakiona sanakirjatietokantoja ja tesaurusten sanakirjoja sekä venäjän, ukrainan ja englannin kielten synonyymejä, jotka Informatik-yhtiö toimittaa.
  9. Haku voidaan suorittaa käyttämällä jokerimerkkejä ("*") sekä määrittämällä hakuoperaattoreita ("AND", "OR", "NOT", "NEXT") ja erikoismerkkejä.

Täystekstihaku voidaan suorittaa missä tahansa 1C:Enterprise 8.1 -alustan kokoonpanossa.

Tämä koskee myös kokoonpanoja, jotka on muunnettu versiosta 8.0. Ota täystekstihaku käyttöön siirtymällä kokoonpanosi "Toiminnot"-valikkoon ja valitsemalla "Hallitse kokotekstihakua" ja ottamalla tämän ominaisuuden käyttöön (katso kuva 1).

Riisi. 1

Jos käytät vakiokokoonpanoja 8.1-alustalla, niissä on todennäköisesti jo sisäänrakennettu "Data Search" -käsittely (valikko "Työkalut" / "Datahaku"). Jos tällaista käsittelyä ei ole käytetyssä kokoonpanossa, sillä ei ole väliä.

Se löytyy aina ITS-levyltä. Tässä artikkelissa käytämme esimerkkejä tämän käsittelyn toiminnasta "Enterprise Accounting" -demokonfiguraatiossa (versio 1.6) täystekstihaun kyvyn osoittamiseksi.

Kuten jo mainittiin, haku voidaan suorittaa useilla sanoilla, käyttämällä hakuoperaattoreita ja käyttämällä tarkkaa lausetta. Lisäksi hakusijainti voidaan rajoittaa tiettyihin konfigurointiobjekteihin (esimerkiksi asiakirjoihin "Laki tuotantopalvelujen tarjoamisesta") tai konfigurointiobjektien luetteloon/joukkoon.

Tietoa haettaessa on sallittua käyttää hakuoperaattoreita taulukossa mainitussa hakumerkkijonossa (kaikki operaattorit on määritettävä vain isoilla kirjaimilla ja ilman lainausmerkkejä).

Taulukko


Huomaa: jos operaattoreita ei ole määritetty (sanat kirjoitetaan välilyönnillä erotettuina), ohjelma etsii kaikki kyselyn sanat "AND"-operaattorilla.

Riisi. Kuvassa 2 on esimerkki yksinkertaisesta osittaisesta sanahausta. Kirjoittamalla "luotettava*" saimme tuloksena linkin yksityishenkilöön sekä asiakirjoihin, joiden kommenteissa esiintyy lause "Luotettava asiakas".


Riisi. 2

Riisi. Kuvassa 3 on esimerkki monimutkaisemmasta hausta käyttämällä hakurivillä "OR"-rakennetta ja hakualueen rajoittamista "Nimikkeistö"-hakemiston ja asiakirjojen "Tavaroiden ja palveluiden vastaanotto", "Tavaroiden ja palveluiden myynti" avulla. On selvästi nähtävissä, että haku heijasteli koko nimikkeistöä, jonka nimet sisältävät joko sanan "teekannu" tai sanan "BINATONE", sekä kaikki määritellyn tyyppiset asiakirjat, jotka sisältävät kaikki sopivat nimikkeistöt.


Koko tekstihaku- Voit etsiä tekstitietoja, jotka sijaitsevat melkein missä tahansa käytetyssä kokoonpanossa. Tässä tapauksessa voit etsiä tarvittavia tietoja joko koko kokoonpanosta kokonaisuutena tai rajaamalla hakualueen useisiin objekteihin (esimerkiksi tietyntyyppisiin asiakirjoihin tai hakemistoihin). Itse hakukriteerit voivat vaihdella melko laajalla alueella. Toisin sanoen voit löytää tarvittavat tiedot edes muistamatta tarkalleen, missä ne on tallennettu kokoonpanoon ja kuinka tarkalleen ne on tallennettu.

Koko tekstihaku tarjoaa seuraavat vaihtoehdot:

  • On olemassa tuki translitteraatiolle (venäläisten sanojen kirjoittaminen latinalaisilla kirjaimilla GOST 7.79-2000:n mukaisesti). Esimerkki: "venäläinen lause" = "russkaya fraza".
  • Korvaustuki (osien merkkien kirjoittaminen venäjänkielisillä sanoilla yhden näppäimen latinalaisilla merkeillä). Esimerkki: "russrfz frapf" (kunkin sanan päätteet kirjoitetaan latinalaisin kirjaimin esimerkiksi operaattorivirheen seurauksena).
  • On mahdollista tehdä sumea haku (löytyneiden sanojen kirjaimet voivat poiketa toisistaan) sumean kynnyksen osoituksella. Esimerkki: määrittämällä hakupalkkiin sana "hello" ja epämääräisyyden 17%, löydämme kaikki samankaltaiset sanat virheineen ja ilman: "hello", "prevet", "prived".
  • Valittujen metatieto-objektien haun laajuus on mahdollista määrittää.
  • Standardikenttien nimien ("Koodi", "Nimi" jne.) kokoteksti-indeksointi suoritetaan kaikilla konfigurointikielillä.
  • Haku suoritetaan ottaen huomioon venäjän, englannin ja ukrainan kielten synonyymit.
  • Venäjän kielen morfologinen sanakirja sisältää useita erityisiä sanoja, jotka liittyvät toiminta-alueisiin, jotka on automatisoitu 1C:Enterprise-ohjelmajärjestelmällä.
  • Toimitetut sanakirjat sisältävät vakiona sanakirjatietokantoja ja tesaurusten sanakirjoja sekä venäjän, ukrainan ja englannin kielten synonyymejä, jotka Informatik-yhtiö toimittaa.
  • Haku voidaan suorittaa käyttämällä jokerimerkkejä ("*") sekä määrittämällä hakuoperaattoreita ("AND", "OR", "NOT", "NEXT") ja erikoismerkkejä.

Täystekstihaku voidaan suorittaa missä tahansa 1C:Enterprise 8 -alustan kokoonpanossa

Voit avata koko tekstihaun ohjausikkunan seuraavasti:

Säännöllinen käyttö- valikkokohta Toiminnot - Kokotekstihaun hallinta.

Hallittu sovellus- valikkokohta Päävalikko - Kaikki toiminnot - Vakio -Koko tekstihaun hallinta.


  • Päivitä indeksi– Hakemiston luominen/hakemiston päivitys;
  • Tyhjennä indeksi– indeksin nollaus (suositellaan kaikkien tietojen päivityksen jälkeen);
  • kohde Salli indeksin yhdistäminen– vastaa pää- ja lisäindeksin yhdistämisestä.

Kokotekstihaku suoritetaan kokotekstihakemistolla. Ilman hakemistoa kokotekstihaku sinänsä ei ole mahdollista. Jotta haku olisi tehokasta, kaikki asiaankuuluvat tiedot on sisällytettävä kokotekstihakemistoon. Jos käyttäjä syöttää tietokantaan uutta tietoa, se on sisällytettävä kyseiseen hakemistoon, muuten se ei osallistu hakuun. Tämän välttämiseksi sinun on päivitettävä kokotekstihakemisto. Päivitettäessä järjestelmä analysoi vain tietyntyyppisiä tietoja: merkkijono, viitetyyppitiedot (linkit asiakirjoihin, hakemistoihin), numero, päivämäärä, arvovarasto. Jos käyttäjällä ei ole pääsyoikeuksia tiettyihin tietoihin, hän ei voi nähdä niitä hakutuloksissa. Muista myös, että niiden objektien ominaisuuksissa, joille haku suoritetaan, on asetettava arvo Koko tekstihaku – Käytä, joka on oletuksena asetettu.

Kuinka voit huomata kiinteistön Käyttää asetettu koko hakemistolle Vastapuolet, mutta tämä voidaan tehdä jokaiselle sen vastaavan tyypin attribuutille.

Katsotaanpa tarkemmin kokotekstihakemistoa, joka koostuu kahdesta osasta (indeksistä): päähakemistosta ja lisähakemistosta. Pääindeksi varmistaa suuren tiedonhakunopeuden, mutta sen päivittäminen on datamäärästä riippuen suhteellisen hidasta. Lisäindeksi on sen vastakohta. Tiedot lisätään siihen paljon nopeammin, mutta haku on hitaampaa. Järjestelmä hakee samanaikaisesti molemmista hakemistoista. Suurin osa tiedoista on päähakemistossa ja järjestelmään lisätyt tiedot menevät lisähakemistoon. Vaikka lisähakemiston datamäärä on pieni, sen läpi hakeminen on suhteellisen nopeaa. Kun järjestelmän kuormitus on vähäistä, tapahtuu indeksien yhdistämistoiminto, jonka seurauksena lisäindeksi tyhjennetään ja kaikki tiedot sijoitetaan päähakemistoon. On suositeltavaa suorittaa indeksien yhdistäminen silloin, kun järjestelmän kuormitus on minimaalinen. Tätä tarkoitusta varten voit luoda säänneltyjä tehtäviä ja ajoitettuja tehtäviä.

Erikoisoperaattorit sallitaan hakulauseketta määritettäessä

Täystekstihakumekanismi mahdollistaa osan venäjän sanan merkeistä kirjoittamisen käyttämällä yhden näppäimen latinalaisia ​​merkkejä. Hakutulos ei muutu.

Kaksi operaattoria SEURAAVANA

  • yksinkertaistettu. 8 sanan erolla
  • LÄHELLÄ/[+/-]n – etsi tietoja yhdestä määritteestä n-1 sanan etäisyydeltä niiden välillä.

Merkki osoittaa, mihin suuntaan ensimmäisestä sanasta toista sanaa etsitään. (+ - jälkeen, - ennen)

Jokerimerkkiä "*" voidaan käyttää vain sanan lopun korvikkeena

Sumeusoperaattori "#". Jos nimen tarkka kirjoitusasu, nimi ei ole tiedossa.

Ohjelmistot ja 1C-työkalut: ohjelmointi.

Synonyymioperaattori "!" Voit löytää sanan ja sen synonyymit

Kuinka koko tekstihakuhakemisto päivitetään ohjelmallisesti?

Code 1C v 8.x Procedure UpdateIndices() Export
FulltextSearch.UpdateIndex();
Menettelyn loppu

Koko tekstin datahakuesimerkki

Hakuluettelomuuttujan määrittäminen

Code 1C v 8.x Variable Search List;

Lisäksi määritämme When Form Opens -tapahtuman käsittelyssä, että tämä muuttuja sisältää kokotekstihakuluettelon, jonka avulla haemme tietoja

Koodi 1C v 8.x -menettely OnOpen()
SearchList = FullTextSearch.CreateList();
Menettelyn loppu

Nyt, jos napsautat Etsi-painiketta, kirjoitamme koodin, jonka avulla voimme suorittaa haun SearchExpression-kentässä määritetyn lausekkeen mukaisesti

Code 1C v 8.x Proseduuri FindClick (Elementti)
SearchList.SearchString = SearchExpression;
Yrittää
SearchList.FirstPart();
Poikkeus
Varoitus(ErrorDescription());
EndAttempt;
Jos SearchList.FullQuantity() = 0 Sitten
Form Elements.ResultMessage.Value = "Ei löydy";
Form Elements.Search Result.SetText("");
Muuten
OutputSearchResult();
endIf;
Menettelyn loppu

Ensin tässä menettelyssä asetamme käyttäjän syöttämän hakutermin hakumerkkijonoksi koko tekstihaulle. Sitten suoritamme FirstPart()-menetelmän, joka itse asiassa käynnistää kokotekstihaun ja palauttaa ensimmäisen osan tuloksista. Oletusarvoisesti pala sisältää 20 elementtiä. Sen jälkeen analysoimme hakuluettelon elementtien lukumäärää. Jos se ei sisällä mitään elementtiä, näytämme vastaavan viestin muodossa. Muussa tapauksessa kutsutaan DisplaySearchResult()-proseduuria, joka näyttää tulokset käyttäjälle.

Luodaan lomakemoduuliin samanniminen proseduuri ja kirjoitetaan siihen koodi:

Koodi 1C v 8.x Proseduuri OutputSearchResult()
Form Elements.ResultMessage.Value = "Näytössä" + Rivi(SearchList.InitialPosition() + 1) + " - " + Rivi(HakuLista.Alkusijainti() +HakuLista.Määrä()) + " from " + SearchList.FullQuantity() ;
Tulos = SearchList.GetDisplay(FullTextSearchDisplayType.HTMLText);
FormElements.SearchResult.SetText(Result);
ButtonAvailability();
Menettelyn loppu

Tämän menettelyn vaiheet ovat yksinkertaisia. Ensin luomme viestin siitä, mitkä elementit näytetään ja kuinka monta elementtiä yhteensä löydettiin. Sitten saamme kokotekstihakutuloksen HTML-tekstin muodossa ja näytämme tämän tekstin lomakkeessa sijaitsevassa HTML-dokumenttikentässä.

Lopuksi siirrämme hallinnan Button Availability() -menettelyyn, jotta edellinen osa- ja seuraava osa -painikkeita voidaan käyttää tai päinvastoin evätä pääsy (riippuen siitä, mikä osa saaduista tuloksista näytetään). Tämän menettelyn teksti on esitetty säännöstössä

Koodi 1C v 8.x Menettelypainikkeen saatavuus ()
Form Elements.NextPosition.Availability = (SearchList.FullQuantity() - SearchList.StartPosition()) > SearchList.Quantity();
Form Elements.PreviousPosition.Availability = (SearchList.StartPosition() > 0);
Menettelyn loppu

Nyt sinun on luotava tapahtumakäsittelijät, jotta voit napsauttaa PreviousPart()- ja NextPart()-painikkeita.

Koodi 1C v 8.x Menettely Edellinen osan puristus (elementti)
SearchList.PreviousPart();
OutputSearchResult();
Menettelyn loppu
Toimenpide Seuraavan osan puristus (elementti)
SearchList.NextPart();
OutputSearchResult();
Menettelyn loppu

Viimeinen "kosketus" on luoda käsittelijä lomakkeessa olevan HTML-dokumenttikentän onclick-tapahtumalle. Tosiasia on, että kokotekstihaun tulos, joka esitetään HTML-tekstin muodossa, sisältää hyperlinkkejä hakuluettelon elementtien numeroihin. Ja toivomme, että kun käyttäjä napsauttaa tätä linkkiä, järjestelmä avaa tämän luetteloelementin sisältämän objektin muodon. Tätä varten siepaamme HTML-dokumenttikentässä olevan HTML-dokumentin onclick-tapahtuman, haemme hyperlinkistä luettelon numeron ja avaamme vastaavan objektin lomakkeen. HTML-dokumenttikentän onclick-tapahtumakäsittelijän teksti esitetään koodina

Code 1C v 8.x Prosedure Search Resultonclick(Element, pEvtObj)
htmlElement = pEvtObj.srcElement;
// Tarkista elementin tunnus
If (htmlElement.id = "FullTextSearchListItem") Sitten
// Hanki tiedoston nimi (hakuluettelon rivinumero),
// sisältyvät hyperlinkkiin
NumberInList = Number(htmlElement.nameProp);
// Hae hakuluettelon merkkijono numeron mukaan
SelectedRow = Hakulista[NumeroLista];
// Avaa löydetyn objektin muoto
OpenArvo(ValittuRivi.Arvo);
pEvtObj.returnValue = Epätosi;
endIf;
Menettelyn loppu

Uusi hakutoiminto perustuu kahteen mekanismiin:
- täystekstihaku (toimii erittäin nopeasti ja vaatii vain vähän laskentaresursseja);
- haku DBMS:llä (yleensä haun kesto ja laskentaresurssien kustannukset ovat verrannollisia taulukon tietojen määrään).

Nykyisessä toteutuksessa luettelosta haetaan käyttämättä kokotekstihaku seuraavissa tapauksissa ():
- kokotekstihakemisto on poistettu käytöstä tietokantatasolla;
- päätaulukkoobjektia ei ole indeksoitu kokotekstihakemistolla;
- täystekstihaun avulla tehdyn haun seurauksena vastaanotettiin virhe.

Jos tietokannassa on käytössä kokotekstihaku, eikä hakemistoa päivitetä kokonaan tai osittain (kokemukseni mukaan 95 % Asiakastietokannoista), niin käyttäjä saa haussa joko epäluotettavan tai tyhjän hakutuloksen.

Kysymme 1C Companylta - mitä tehdä? Kuinka taata hakutulosten luotettavuus aina?
Saamme vastauksen: Kyllä, jotta hakutulokset olisivat ajan tasalla, kun koko tekstihaku on käytössä, sinun on varmistettava, että koko tekstihakuhakemisto on ajan tasalla. Ei ole muita vaihtoehtoja tehokkaalle ja ajan tasalla olevalle. nykyinen haku vielä ().

Onko olemassa "ajantasaista kokotekstihakemistoa"? Riippuu käyttäjien määrästä, tietokannan tietojen muutosten voimakkuudesta ja hakemistopäivitysten tiheydestä. Yleensä hakemistopäivitykset suoritetaan 60 sekunnin välein. On hyvä, jos monia objekteja ei muutettu, ja prosessi onnistui käsittelemään kaikki muutokset tässä 60 sekunnissa. Entä jos lähettäisit asiakirjaryhmän uudelleen tai kirjoittaisit hakemiston massiivisesti uudelleen? Tässä tapauksessa kukaan ei voi taata aikaa, jonka jälkeen hakemistohaku tuottaa jälleen luotettavaa tietoa.
Periaatteessa tämä ei ole erityisen kriittinen, lukuun ottamatta muutamia tilanteita. Yleinen vaihtoehto käyttäjille on asettaa valinta luetteloon jollakin arvolla, esimerkiksi "Tili", kirjoittaa uusi tai kopioida olemassa oleva dokumentti ja kirjoittaa se muistiin. Vanhalla haulla uusi asiakirja oli heti näkyvissä luettelossa. Nyt käyttäjä näkee sen parhaassa tapauksessa vasta N sekunnin kuluttua, jolloin N on lähempänä 50-60 sekuntia 2-3:n sijaan.
Jos et huomaa, että uutta asiakirjaa ei ole ja anna jollekin tietoa valittujen tulosten perusteella, se on tarkoituksella epäluotettava.

Näin kävi normaalisti tietokannan kanssa työskennellessä. Mitä tapahtuu tietyissä tilanteissa? Annan teille pari esimerkkiä.
1) Työtietokannassa kokotekstihakemisto on käytössä ja sitä päivitetään usein. Käyttäjä pyytää ottamaan käyttöön kopion toimivasta tietokannasta, jotta hän voi analysoida tiedot.
Palautamme varmuuskopion ja annamme pääsyn. Mutta kokotekstihaku ei toimi, koska... hakemistoa ei tallenneta DBMS:ään, vaan erillisiin tiedostoihin (sekä tiedosto- että asiakaspalvelinversioina). dt-tiedostossa ei ole hakemistoa.
ne. Jotta käyttäjä voi käyttää luettelohakua, tämän tietokannan kokotekstihakemisto on poistettava käytöstä. Totta, käyttäjä on hieman yllättynyt, että haku kestää paljon kauemmin. Tai rakentaa hakemisto uudelleen koko tietokannassa.

2) (Relevantti enemmän tai vähemmän suurille tietokannoille). Tuotantotietokannassa on täystekstihakemisto käytössä, ja sitä päivitetään usein. Kuun loppu tulee ja jakson päättyminen alkaa. Aloitamme asiakirjojen massalatauksen ja välittämisen. Järjestelmän kuormituksen vähentämiseksi estämme rutiinitehtävien suorittamisen, ja vastaavasti indeksin päivitys pysähtyy. Käyttäjät ovat lievästi sanottuna ymmällään siitä, miksi luetteloissa ei ole uusia tai muuttuneita asiakirjoja. Ainoa tapa on poistaa tietokannan täystekstihaku käytöstä ja siten asettaa laitteistolle vielä suurempi kuormitus kaikkien yksityiskohtien raskaan haun vuoksi.

Näin ollen minusta näyttää siltä, ​​että indeksin päivittämisestä tulee toinen päänsärky tietokannan ylläpitäjille.
Aiemmin 100-prosenttisen tiedon luotettavuuden ja relevanssin takaanut järjestelmä on nyt muuttumassa enemmän referenssijärjestelmäksi, josta ei voi olla täysin varma.
Ja käyttäjät saavat toisen syyn moittia IT-ihmisiä - "järjestelmäsi ei toimi oikein."

Huolimatta siitä, että täystekstihaku alustalla 8.3 ilmoitti kehittäjät jo kauan sitten (alustalta 8.3.5), sitä ei käytetty aktiivisesti tyypillisissä kokoonpanoissa. Enterprise Accounting 3.0:n uusimmissa julkaisuissa kehittäjät ovat sallineet kokotekstihaun monissa luetteloissa. Tämä oli järkytys käyttäjilleni - ohjelma lopetti etsimisen.

Tietenkin kokotekstihaku toimii, mutta käyttäjät ovat hämmentyneitä näkemättä Etsi-ikkunaa. Tyypillinen käyttöskenaario: He aloittavat kirjoittamisen näppäimistöltä, kirjoitusprosessin aikana ilmestyy "Etsi"-ikkuna, joka ilmaisee kentän, jossa haku suoritetaan, haetun tekstin ja "Part of string" -hakutilan.

Kun painat Enter-painiketta, luettelo suodatetaan ja haun tilapalkki tulee näkyviin luettelon yläpuolelle. Käyttäjä päättää itse, millä alalla ja mitä hän etsii. Uusi haku alkaa toimia heti kirjoittaessasi ja vaikuttaa kaikkiin luettelossa näkyviin kenttiin. Erillistä ikkunaa ei tule näkyviin, kaikki hakusanat on korostettu värillisinä.

Elimme useita päiviä uuden etsinnän parissa. Käyttäjät kärsivät, valittivat, sabotoitiin. Valitukset eivät loppuneet, johdolle annettiin tehtäväksi "tehdä kaikki niin kuin oli".

Mistä aloittaa? Sinun on ymmärrettävä, miten lomakkeet eroavat toisistaan. Latasin määritysten lähdekoodit uudella hakukäyttäytymisellä ja vanhalla ja vertasin lomakelähteitä.

Uuden kokotekstihaun toiminnallisuus saadaan aikaan lisäämällä lomakeelementti, jonka tyyppi on "Hakumerkkijono". Tuli selväksi mitä etsiä. Löysin artikkelin ITS 7.3.1.5:stä. Hae dynaamisesta luettelosta. Tämän artikkelin tutkiminen johti siihen johtopäätökseen, että hakutoiminnon uusi versio riippuu kahdesta tekijästä: 1. Lomakkeessa on oltava yllä oleva lomakeelementtilisäys, 2. Lomakkeen dynaamisen luettelon ominaisuus "SearchStringPosition" ei ole yhtä suuri kuin "Ei mitään".

Teoriassa lomaketta luotaessa palvelimelle riittää, että "SearchStringPosition"-listaominaisuus määritetään arvolle "SearchStringPosition.No", mutta tämä ei joissain tapauksissa toiminut kaikilla lomakkeilla, uusi haku toimi edelleen . Emme voi poistaa ohjelmallisesti lomakeelementtejä, joita ei ole luotu ohjelmallisesti, mutta voimme hallita näkyvyyttä. Jos "Add-onSearchString" -lomakeelementin näkyvyys poistetaan, koko tekstin uusi haku lakkaa toimimasta. Kokeiden aikana syntyi seuraava koodi, jonka sijoitin yleismoduuliin:

Toimenpide NewSearchInLists(Form) poistaminen käytöstä Export List = Form.Elements.Find("Lista");

Jos lista = määrittelemätön, sitten Return;

endIf;

List.SearchStringPosition =SearchStringPosition.No;

AdditionSearchString = Form.Elements.Find("AdditionSearchString");

Jos EI SearchStringAddition = Määrittämätön Sitten SearchStringAddition.Visibility = False;

endIf; Menettelyn loppu

Sinun on välitettävä korjattu lomake "Poista uusi haku luetteloista" -menettelyyn. Mutta kuinka voit tehdä tämän kaikille muodoille kerralla?