Planera Motivering Kontrollera

1c ställa in heltextsökning. Fulltext sökmotor (1Cv8). Sökning i fulltext

Hittills är det få som vet att från och med version 8.1 har 1C: Enterprise -plattformen en underbar och mycket användbar mekanism - fulltextsökning. Vad det är? Hur kan det vara användbart för dig? Dessa frågor besvaras i artikeln av V.V. Fiske, 1C -företag.

Till att börja med några ord om vad det är för mekanism. Heltextsökning genom att säga enkelt språk, låter dig hitta textinformation placeras nästan var som helst i konfigurationen som används. Samtidigt kan du söka efter nödvändig data antingen genom hela konfigurationen som helhet eller genom att begränsa sökområdet till flera objekt (till exempel vissa typer av dokument eller kataloger). Själva sökkriterierna kan variera över ett ganska brett intervall. Det vill säga att du kan hitta den data du behöver utan att ens komma ihåg exakt var den lagras i konfigurationen och hur den skrivs.

Heltextsökning ger följande funktioner.

  1. Det finns stöd för translitteration (att skriva ryska ord med latinska tecken i enlighet med GOST 7.79-2000). Exempel: "Rysk fras" = "Ryska fraza".
  2. Det finns stöd för substitution (att skriva en del av karaktärerna i ryska ord med enkla latinska tecken). Exempel: "russrfz phpf" (slutet på varje ord skrivs på latin, till exempel som ett resultat av ett operatörsfel).
  3. Det finns en möjlighet till en suddig sökning (bokstäverna i de hittade orden kan skilja sig åt) med en indikation på den suddiga tröskeln. Exempel: genom att ange ordet "hej" och fuzziness på 17% i sökraden hittar vi alla liknande ord med och utan fel: "hej", "hej", "ge".
  4. Det är möjligt att ange omfattningen av sökningen efter de valda metadataobjekten.
  5. Fulltextindexering av namnen på standardfält ("kod", "namn", etc.) utförs på alla konfigurationsspråk.
  6. Sökningen utförs med beaktande av synonymerna för det ryska, engelska och ukrainska språket.
  7. Den morfologiska ordboken för det ryska språket innehåller ett antal specifika ord relaterade till de verksamhetsområden som automatiseras med hjälp av 1C: Enterprise -mjukvarusystemet.
  8. Som standard innehåller de medföljande ordböckerna ordboksdatabaser och ordböcker i synonymordboken och synonymer till ryska, ukrainska och Engelska språk, som tillhandahålls av företaget "Informatic".
  9. Du kan söka med jokertecken ("*"), samt ange sökoperatörer ("OCH", "ELLER", "INTE", "NÄSTA") och specialtecken.

Heltextsökning kan utföras i valfri konfiguration på plattformen 1C: Enterprise 8.1.

Detta gäller även konfigurationer som konverterades från version 8.0. För att aktivera fulltext-sökfunktioner, gå bara till "Operations" -menyn i din konfiguration och välj objektet "Full-text search management" och aktivera sedan den här funktionen (se fig. 1).

Ris. 1

Om du använder typiska konfigurationer på 8.1-plattformen har de troligtvis redan inbyggd bearbetning "Datahämtning" (meny "Verktyg" / "Datahämtning"). Om sådan behandling saknas i den använda konfigurationen spelar det ingen roll.

Det kan alltid hittas på ITS -disken. I den här artikeln kommer vi att använda exempel på hur just denna bearbetning fungerar i demokonfigurationen "Enterprise Accounting" (rev. 1.6) för att demonstrera möjligheterna med fulltextsökning.

Som redan nämnts kan sökningen utföras med flera ord, med hjälp av sökoperatorer och med den exakta frasen. Dessutom kan sökplatsen begränsas till specifika konfigurationsobjekt (t.ex. Manufacturing Services Act -dokument) eller en lista / uppsättning konfigurationsobjekt.

När du söker efter data är det tillåtet att använda sökoperatorer i söksträngen (alla operatörer måste endast anges med HÖGSTA bokstäver och utan citattecken) som anges i tabellen.

tabell


Observera: om inga operatörer anges (ord separeras med ett mellanslag), söker programmet efter alla ord från frågan med "AND" -operatorn.

Ris. 2 visar ett exempel på en enkel sökning på en del av ett ord. Genom att skriva "hopp *" fick vi en länk till enskild, liksom dokument som innehåller frasen "Betrodda kunder" i kommentarerna.


Ris. 2

Ris. 3 visar ett exempel på en mer komplex sökning med "ELLER" -konstruktionen i söksträngen och begränsning av sökområdet enligt "Nomenklatur" -katalogen och dokumenten "Mottagning av varor och tjänster", "Försäljning av varor och tjänster". Det framgår tydligt att sökningen speglade hela nomenklaturen, i vars namn det finns antingen ordet "tekanna" eller ordet "BINATONE", samt alla dokument av de angivna typerna som innehåller all lämplig nomenklatur.


Trots att fulltextsökning på 8.3-plattformen tillkännagavs av utvecklarna för länge sedan (från 8.3.5-plattformen), användes den inte aktivt i typiska konfigurationer. I de senaste versionerna av Enterprise Accounting 3.0 har utvecklare inkluderat fulltextsökning i många av listorna. Det var en chock för mina användare - programmet slutade söka.

Naturligtvis fungerar fulltextsökning, men användare är förvirrade när de inte ser fönstret "Sök". Typiskt användningsscenario: Börja skriva, medan du skriver visas fönstret "Sök", vilket anger fältet där sökningen ska utföras, söktexten och sökläget "Efter del av strängen".

Genom att trycka på enter -knappen filtreras listan, sökstatusfältet visas ovanför listan. Användaren bestämmer själv inom vilket område och vad han letar efter. Den nya sökningen börjar fungera så snart du skriver och påverkar alla fält som visas i listan. Ett separat fönster visas inte, alla matchningar av sökord markeras i färg.

I flera dagar levde vi med en ny sökning. Användare led, klagade, saboterade. Klagomål slutade inte, ledningen satte uppgiften "att göra allt som det var."

Var ska man starta? Du måste förstå hur formerna skiljer sig från varandra. Dumpade konfigurationskällorna med det nya sökbeteendet och det gamla, och jämförde formulärkällorna.

Funktionen för den nya fulltextsökningen tillhandahålls genom tillägg av ett formulärelement med typen "Söksträng". Det blev klart vad man ska leta efter. Hittade en artikel om ITS 7.3.1.5. Sök i en dynamisk lista. Studien av denna artikel ledde till slutsatsen att den nya versionen av sökoperationen beror på två faktorer: 1. Formuläret måste ha ovanstående tillägg av formulärelementet, 2. Den dynamiska listan på formuläret måste ha "SearchString Position" "egendom inte lika med" Ingen ".

I teorin, när du skapar ett formulär på servern, är det tillräckligt att ställa in "SearchStringPosition" -listaegenskapen till "SearchStringPosition.No", men detta fungerade inte med alla former, i vissa fall fortsatte den nya sökningen att fungera. Vi kan inte programmatiskt radera formulärelement som inte har skapats programmatiskt, men vi kan styra synligheten. Om synligheten tas bort för formulärelementet "SearchStringAddition", slutar den nya fulltextsökningen också att fungera. Under experimenten föddes följande kod, som jag placerade i den gemensamma modulen:

Procedur DisableNewSearchVSLists (Form) Export List = Form.Elements.Find ("List"); Om List = Odefinierad Returnera sedan; EndIf; List.SearchStringPosition = SearchStringPosition.No; AppendixSearchString = Form.Elements.Find ("AppendixSearchString"); If NOT AdditionSearchString = Odefinierat AdditionSearchString.Visibility = False; EndIf; Slutet av proceduren

I proceduren "DisableNewSearchVSLists" måste du överföra formuläret som ska korrigeras. Men hur kan du göra detta för alla former på en gång?

Den första lösningen är att manuellt fixa nödvändiga formulär i konfiguratorn med hjälp av formulärredigeraren. Jag vägrade omedelbart den här lösningen - den är lång och trist och det är svårt att uppdatera konfigurationen senare.

Den andra lösningen är att anropa ett förfarande när formuläret öppnas, vilket programmatiskt inaktiverar den nya sökningen. Proceduren kan anropas från alla andra förfaranden, vars lansering redan är registrerad i alla former, i det här fallet, med ytterligare uppdateringar, behöver vi bara övervaka denna procedur så att den inte ändras. Jag valde Common Module.Print Management, som har:

OnCreateAtServer (Form, CommandDefault Place, Print Objects) Export

Denna procedur kallas när ett formulär skapas på servern för att fylla i utskriftskommandon. I denna procedur skriver vi koden som kallar vår funktion för att inaktivera ny sökning i listor:

MySharedModule.Disable NewListSearch (Form);

Bokförarna njuter av den gamla sökningen, och vi förbereder oss för det ögonblick då kompatibilitetsläget Enterprise Accounting 3.0 tillåter oss att ta med denna funktionalitet i tillägget.

Tips 1: Inaktivera heltextsökning *

De flesta revisorer vet inte om den här funktionens existens och använder aldrig den (Service - Data Search)

Mekanismen för fulltextsökning i 1C gör att du kan hitta information i 1C med nyckelord (analogt med sökning på Internet, när du anger ett ord och du får resultat av frågor). Samtidigt beror söktiden avsevärt på databasens volym och kan ta flera timmar. Att inaktivera heltextsökningsmekanismen påverkar inte andra funktioner och stabilitet i arbetet i 1C.

Heltextsökningsmekanismen i 1C är aktiverad som standard. För att inaktivera fulltextsökning måste du gå Operationer - Sökning i fulltext-Justera och ta bort skylten " Tillåt heltextsökning»

Inaktivering av heltextsökningsmekanismen utförs i exklusivt läge (ingen ska arbeta i programmet utom du) **

Inaktivering av heltextsökmotorn ger en prestandaförbättring på upp till 10%.

Tips 2: Beräkna totalt *

De flesta revisorer är inte medvetna om förekomsten av denna operation, och den måste utföras varje månad.

Resultaten är 1C -mekanismer för snabb åtkomst till data när du genererar rapporter och utför olika beräkningsoperationer.

För att kunna räkna om totalsumman måste du gå till Operations - Totals Management, ställa in datumet för att beräkna totalsumman (början av den aktuella månaden) i avsnittet "Alla register" och klicka på "Execute" -knappen

Omräkning av totalsatser utförs i exklusivt läge (ingen ska arbeta i programmet, förutom du) **

Omräkningen av totalen ger en produktivitetsökning med upp till 10%.

Tips 3: Inaktivera objektversion ***

De flesta revisorer känner inte till den här funktionen och använder den inte.

Till skillnad från en vanlig loggbok kan objektversionering lagra information inte bara om vilken användare som arbetade med dokumentet, utan också vad han exakt ändrade (Service - Object change history). Det här läget kan vara användbart, men det rekommenderas att endast aktivera det för en specifik lista med dokument, eftersom det leder till en minskning av prestandan för 1C och en ökning av informationsbasen

Inställning av versionering utförs genom Operations - Programinställningar - Versionering. Om inställningen inte krävs måste du ta bort kryssrutan "Använd objektversionering".

Om inställningen behövs för en specifik lista med dokument, gå till "Objektversionsinställningar" och högerklicka för att ställa in "Versionering" för de obligatoriska objekten **

Inaktivering av versionering ger en prestandahöjning med upp till 5%.

_________________________________________________________________

* För konfigurationer baserade på "1C: Management Tillverkande företag"," 1C: Integrated Automation "," 1C: Enterprise Accounting 2.0 "," 1C: Trade Management 10.3 "

** Innan du utför rutinoperationer med basen är det nödvändigt att skapa en kopia av basen.

*** För konfigurationer baserade på "1C: Manufacturing Enterprise Management", "1C: Integrated Automation".

Fulltext-sökmotor i 1C låter dig snabbt hitta den information som behövs för användaren. Den här vyn sökning är särskilt effektiv om informationsbasen har en stor mängd information, och det är inte heller känt exakt var data av intresse för användaren finns eller, som ofta händer, deras exakta namn inte är känt. För att öppna sökrutan för fulltext-sökning, gör följande: menyalternativ Operationer Sökning i fulltext .

I det här fönstret kan du se tre knappar: Anpassning - Aktivera / inaktivera heltextsökning;

Uppdatera index Indexskapande / indexuppdatering; Rensa index - nollställning av index (rekommenderas efter uppdatering av all data); paragraf Tillåt sammanfogning av index ansvarig för att slå samman det primära och sekundära indexet.

Heltextsökning utförs med hjälp av fulltextindex. I avsaknad av ett index är fulltextsökning som sådan inte möjlig. För att en sökning ska lyckas måste all data som krävs ingå i fulltextindexet. Om användaren har angett nya data i databasen bör de inkluderas i indexet i fråga, annars deltar de inte i sökningen. För att undvika detta måste indexet i fulltext uppdateras. Vid uppdatering analyserar systemet endast vissa typer av data: Sträng, referensdata (länkar till dokument, referensböcker), Antal, datum, lagring. Om användaren inte har åtkomsträtt till viss information kommer han inte att kunna se den i sökresultaten. Det bör också komma ihåg att värdet Heltextsökning - Använd som är inställd som standard.

Som du kan se fastigheten Använda sig av installerat för hela katalogen RegNumbers , men detta kan göras för var och en av dess attribut av motsvarande typ.

Låt oss titta närmare på fulltextindexet, som består av två delar (index): huvudindex och ytterligare ... Huvudindexet ger en hög hastighet för datasökning, men uppdateringen är relativt långsam, beroende på datamängden. Tilläggsindexet är motsatt det. Data läggs till det mycket snabbare, men sökningar går långsammare. Systemet söker samtidigt i båda indexen. De flesta uppgifterna finns i huvudindexet, och data som läggs till i systemet går in i det sekundära indexet. Även om datamängden i det sekundära indexet är liten, är sökningar på den relativt snabba. Vid en tidpunkt då belastningen på systemet är lätt, sker en indexfusion, vilket resulterar i att det sekundära indexet rensas och all data placeras i huvudindexet. Det är att föredra att slå samman index vid en tidpunkt då belastningen på systemet är minimal. För detta ändamål kan du skapa schemalagda uppgifter och uppgifter enligt ett schema.

Tänk på en automatisk uppdatering av indexet när programmet startar. Detta fall är lämpligt för enanvändardatabaser (produkter som 1C Grundläggande redovisning, 1C förenklat), eftersom med ett stort antal användare kommer uppdateringen att ske efter lanseringen av applikationen för var och en av användarna, vilket som ett resultat kommer att påverka systemprestandan i hög grad.

Låt oss först skapa gemensam modul och låt oss kalla det, till exempel PP. Vi kommer att skriva följande procedur i den:

Procedur Uppdatering av index () Export

FulltextSearch.UpdateIndex ();

Slutet av proceduren

Låt oss ställa in egenskaperna som på bilden.

Högerklicka sedan på konfigurationsnamnet i konfigurationsträdet och kör kommandot Öppna en modul för ett hanterat program. Välj en fördefinierad funktion i det lilla fönstret högst upp BeforeStartingSystem och sätt följande rad i denna procedur:

RefreshFull-TextSearch.UpdateIndexes ();


Vi sparar de ändringar som gjorts. Således uppdateras indexet automatiskt efter varje lansering av programmet.

Låt oss nu överväga fallet när det finns flera användare. Här kommer vi att använda Vanliga uppgifter ( i konfiguratorläget: i konfigurationsträdet - Allmänt - Rutinuppgifter). I det här fallet är vi bara intresserade av två uppgifter: Uppdatera söktexten för fulltext och slå samman söktexten för fulltext. I egenskaperna för dessa uppgifter väljer du Schema och klicka på länken Öppen.

Vi har satt upp scheman för båda uppgifterna. Det finns inga rekommendationer för inställning i det här fallet, här bestäms inställningen baserat på systemets egenskaper (belastning, mängd information, uppdateringsfrekvens etc.). Själva uppgifterna kommer inte att fungera, vi måste ha en körning av programmet i läget Företag, som kommer att ansvara för att slutföra dessa uppgifter. Det bör genast noteras att detta alternativ används för filsystemet. Vänta bearbetning måste köras i den här sessionen genom att använda en inbäddad språkmetod. Denna bearbetning kommer att se ut så här:

Låt oss växla till Enterprise -läget och göra följande: Låt oss starta vår behandling, som i detta fall kommer att kallas var 5: e sekund och i sin tur kallar metoden "ExecuteJobsProcessing ()". Denna metod kontrollerar om det är dags att utföra uppgifter enligt deras schema. Gå sedan till menyalternativet Operationer - Konstanter - Programinställningar - fliken Datautbyte.

Vi kommer att definiera en användarsession som kommer att vara ansvarig för utförandet och ställa in pollingintervallet för schemalagda jobb. Det rekommenderas inte att arbeta under den här sessionen, eftersom det kan påverka systemets prestanda. Även på ITS -skivor finns en bearbetning ” Lansering av rutinjobb”, Som med våld startar schemalagda jobb efter användarens val. Formen för denna behandling är följande:

Så alla förarbete slutförd och du kan gå vidare till själva datasökningen.

För att börja arbeta med fulltextsökning måste du köra följande kommando: meny Service à datasökning.

Då visas följande fönster:

Genom att trycka på knappen inställningar, visas ett fält med ytterligare inställningar, till exempel: Begränsa sökomfånget, Fuzziness, Serveringsstorlek(i det här fallet är värdet = 5, vilket betyder utmatningen av fem sökresultat per sida). Parameter Fuzziness betecknar en felaktig överensstämmelse mellan en del av tecknen i sökfrågan och information som erhållits under sökningen. Fuzziness anges i procent.

Heltextsökning kan använda följande operatörer:

Dessutom tillåter sökningen i fulltext att skriva en del av tecknen i det ryska ordet med enkla latinska tecken. Detta ändrar inte sökresultatet.

I klient-server-versionen är uppgiftsplaneraren ansvarig för att schemalägga utförandet av uppgifter.

Task Scheduler är en aktiv komponent i servern, d.v.s. oavsett om det finns klientanslutningar till servern kan den utföra schemalagda uppgifter. Schemaläggarens aktivitet är särskilt märkbar när den sekventiellt undersöker alla infobaser för närvaron av schemalagda uppgifter i dem. Schemaläggaren kan skjuta upp pollningen för en specifik infobas om ett anslutningslås eller schemalagd jobbblockering läggs på infobasen.

Den nuvarande listan över schemalagda uppgifter i schemaläggaren kan ändras automatiskt (till exempel när en ny schemalagd uppgift skapas eller en befintlig schemalagd uppgift raderas). I alla fall säkerställer uppgiftsmekanismen relevansen för listan över schemalagda schemaläggningsuppgifter och dess överensstämmelse med listorna över schemalagda uppgifter i klusterinfobaserna.

Efter första listan schemalagda jobb har tagits emot, schemaläggaren kontrollerar regelbundet om det finns önskemål om bakgrundsjobb och om några schemalagda jobb måste utföras enligt deras schema. När uppgiften har mottagits av arbetsflödet upprättar arbetsflödet en anslutning till infobasen och utför uppgiften inom denna anslutning. Eftersom arbetsflödet är optimerat för fleranvändararbete är det bara en dyr operation att bara skapa en infobasanslutning för första gången. Att etablera efterföljande anslutningar till samma infobas tar betydligt mindre tid och resurser de flesta av de interna datastrukturerna delas mellan anslutningarna i samma infobas. När jobbet är klart meddelar arbetsflödet schemaläggaren om jobbets framgång eller misslyckande. I händelse av ett programfel kan schemaläggaren starta om en schemalagd uppgift (om ett fel inträffade när en bakgrundsuppgift utfördes startas den inte om).

Tack!

Funktionen för den nya sökningen är baserad på två mekanismer:
- fulltext-sökning (fungerar mycket snabbt och kräver ett minimum av datorresurser);
- sökning med hjälp av ett DBMS (i allmänhet är sökningens varaktighet och kostnaden för datorresurser proportionella mot mängden information i tabellen).

I den nuvarande implementeringen kommer listan att sökas utan användning sökning i fulltext i följande fall ():
- fulltextindex är inaktiverat på infobasnivå;
- huvudtabellens objekt indexeras inte av fulltextindexet;
- som ett resultat av sökning med fulltextsökning fick ett fel.

Om heltextsökning ingår i infobasen och indexet inte har uppdaterats helt eller delvis (enligt min praxis, 95% av kundernas infobaser), får användaren antingen en ogiltig eller en tom sökning resultat vid sökning.

Vi frågar 1C Firm - vad ska vi göra? hur garanterar jag alltid sökresultatens giltighet?
Vi får svaret: Ja, för att sökresultaten ska vara uppdaterade med fulltextsökning aktiverad måste du se till att fulltextsökindexet är uppdaterat. Det finns inga andra effektiva och relevanta sökalternativ ännu . ().

Finns det något "aktuellt fulltextindex" alls? Beror på antalet användare, intensiteten av ändringar i informationen i databasen och hur ofta indexuppdateringen startas. Normalt utlöses en indexuppdatering var 60: e sekund. Det är bra om inte många objekt ändrades, och proceduren lyckades bearbeta alla ändringar under dessa 60 sekunder. Och om du gjorde en ny utstationering av en grupp dokument eller en massiv omskrivning av en katalog? I det här fallet kan ingen garantera tiden efter vilken indexsökningen igen kommer att returnera giltiga data.
I princip är detta inte särskilt kritiskt, förutom i några få situationer. Ett vanligt alternativ för användare att arbeta är att ställa in ett filter i listan med något värde, till exempel "Motpart", ange ett nytt dokument eller kopiera ett befintligt dokument och skriva ner det. Med den gamla sökningen nytt dokument var direkt synlig på listan. Nu ser användaren det först efter N sekunder in bästa fall, där N är närmare 50-60 sekunder snarare än 2-3.
Om du inte märker att det inte finns något nytt dokument och enligt de valda resultaten ger information till någon, kommer det att vara medvetet opålitligt.

Så var fallet normalt arbete med en informationsbas. Vad kommer att hända i specifika situationer? Här är några exempel.
1) B arbetsbas fulltextindex ingår och uppdateras ofta. Användaren ber att distribuera en kopia av arbetsdatabasen till honom för att analysera data på den.
Vi återställer säkerhetskopian och ger åtkomst. Heltextsökning fungerar dock inte. indexet lagras inte i DBMS, utan i separata filer (både i filen och i klient-serverversionen). Det finns inget index i dt -filen.
de där. för att användaren ska kunna använda sökningen i listorna måste fulltextindex i denna databas vara avstängd. Det är sant att användaren kommer att bli lite förvånad över att sökningen kommer att ta mycket längre tid. Eller bygg om indexet i hela databasen.

2) (Relevant för mer eller mindre stora baser). I en produktionsdatabas aktiveras och uppdateras fulltextindexet ofta. Slutet av månaden kommer och slutet på perioden börjar. Vi börjar massivt ladda och lägga om dokument. För att minska belastningen på systemet blockerar vi utförandet av schemalagda uppgifter respektive och indexuppdateringen stoppas. Användarna kommer, för att uttrycka det milt, att bli förlorade - varför finns det inga nya eller ändrade dokument i listorna? Den enda vägen ut är att inaktivera fulltextsökning efter infobasen och följaktligen få ännu mer belastning på utrustningen på grund av den stora sökningen efter alla nödvändigheter.

Således verkar det för mig att uppdateringen av indexet kommer att bli ytterligare en huvudvärk för infobasadministratörer.
Systemet, som tidigare garanterat 100% noggrannhet och relevans av information när som helst, förvandlas nu till ett hjälpsystem där man inte kan vara helt säker.
Och användarna får en annan anledning att bebreka IT -schnick - "ditt system fungerar inte som det ska."