Sintaxa rapidă a interogării (fql)

Expresiile cu marcatori sunt cuvinte, fraze sau valori numerice care sunt comparate cu un index.

O expresie de text cu un marcator poate fi un cuvânt sau o frază închisă în ghilimele duble.

O expresie numerică cu un marker poate fi o singură valoare sau un interval de valori.

Expresii cu metacaractere

O expresie cu metacaractere denotă un termen sau o expresie care include un asterisc ("*"); un asterisc indică o potrivire cu orice număr de caractere, cu excepția unui spațiu. FQL acceptă căutarea prefixelor pentru proprietăți individuale de tip text și pentru indexuri full-text.

Exemple de expresii cu metacaractere

Următoarea este o listă cu modalități valide de a utiliza expresii de tip "wildcard" în FQL:

Expresii cu termeni numerici

Fiecare expresie cu un termen numeric trebuie să includă o specificație pentru proprietatea unui tip de schemă index index compatibil. Tabelul 2 enumeră tipurile de date numerice care pot fi utilizate în FQL.

Tabelul 2. Tipuri de date numerice care pot fi utilizate în FQL

Operatorii de interogare FAST (FQL) sunt cuvinte cheie care definesc operațiile logice sau alte constrângeri ale operanților. Sintaxa declarațiilor FQL este următoarea:

[operator-spec:] (operand [, operand] * [, parametru = "valoare"] *)

În această sintaxă:

spec. de proprietate este o specificație de proprietate opțională urmată de operatorul.

operator este un cuvânt cheie care indică operația care trebuie efectuată.

operand este o expresie cu un termen sau o altă declarație.

parametru este numele de valoare care modifică comportamentul operatorului.

valoarea este valoarea pentru numele parametrului.

Înregistrarea numelor operatorilor, numele și valorile text ale parametrilor nu este luată în considerare. Spațiile din corpul operatorului sunt permise, dar sunt ignorate, cu excepția cazului în care sunt incluse în ghilimele duble. Durata solicitărilor FQL este limitată la 2048 de caractere.

Tabelul 3 enumeră tipurile de operatori care au suportat FQL.

Tabelul 3. Tipuri de operatori susținuți de FQL

Similar cu operatorul OR, cu excepția faptului că evaluarea dinamică (relevanța în setul de rezultate) nu este afectată de numărul de operanzi corespunzători sau de distanța dintre termeni din element. Operanzii pot fi termeni separați sau părți admise ale expresiilor FQL.

Componenta dinamică de clasificare pentru această parte a interogării se bazează pe termenul cel mai potrivit în expresia ORICE.

Diferența de la operatorul OR este asociată doar cu ratingul din setul de rezultate. Interogarea va avea același număr de potriviri.

orice (operand, operand [, operand] *)

Următoarea expresie corespunde elementelor pentru care indexul full-text conține în mod implicit cuvântul "pisică" sau "câine".

Dacă indicele conține atât "pisică" cât și "câine", dar cuvântul "pisică" este considerat cel mai bun meci, evaluarea dinamică a elementului se va baza pe cuvântul "pisică" fără a ține seama de "câine".

Indică numărul de termeni de interogare pe care elementul trebuie să îl includă astfel încât să fie returnat ca rezultat. Un operand poate fi un termen de interogare, o expresie sau un termen de interogare cu metacaractere.

proprietate-spec: count (operand [, de la =, la =])

Indică necesitatea unui cuvânt sau a unei fraze la sfârșitul proprietății gestionate (maparea limitelor).

Pentru proprietățile gestionate numeric, potrivirea granițelor nu este acceptată. Pentru ei, este acceptată doar corespondența exactă și corespondența intervalului de valori.

Pentru unele aplicații, trebuie să utilizați potrivirea exactă a proprietății gestionate. De exemplu, ar putea fi un nume de produs gestionat. în cazul în care denumirea completă a produsului este o subcotură pentru numele unui alt produs.

se încheie cu ()

Următoarea expresie corespunde articolelor cu valorile "Domnul Adam Jones" și "Adam Jones" în proprietatea gestionată "autor". Nu se vor potrivi elemente cu valoarea "Adam Jones sr".

notițe

Pentru a aplica cererile de potrivire a frontierelor, trebuie să configurați proprietatea gestionată corespunzătoare în schema index.

Dacă activați funcția de mapare a frontierelor pentru o proprietate gestionată, puteți face următoarele:

utilizați cereri explicite de potrivire a limitelor;

interzice căutarea corespondenței fraze dincolo de limitele liniei. Pentru proprietățile gestionate care conțin mai mult de un rând, această funcție blochează potrivirea cuvintelor înainte sau după indicatorul de frontieră.

Indică necesitatea unei potriviri exacte a unui cuvânt sau a unei fraze cu o proprietate gestionată.

Următoarea expresie corespunde elementelor care au o proprietate gestionată numită Titlu. conținând o "sonată" și o proprietate gestionată de Doctype. conținând numai marcatorul "audio". Procesarea lingvistică pentru "audio" nu va fi efectuată. Deoarece jetonul FILTER va fi utilizat pentru a se potrivi cu "audio", acest text nu va fi evidențiat în buletinul cu potrivirile evidențiate.

notițe

Dacă doriți să limitați interogarea pentru a se potrivi cel puțin un set de valori întregi într-o proprietate numerică, puteți face acest lucru în două moduri echivalente din punct de vedere funcțional:

și (șir ("hello world"), filtru (proprietate-spec: sau (1, 20, 453. 3473)))

și (șir ("hello world"), filtru (proprietate-spec: int ("1 20 453. 3473", mode = "sau"

Cel de-al doilea exemplu utilizează operatorul INT și un șir cu un set de valori numerice în ghilimele duble. Acest lucru oferă performanțe mult mai bune atunci când filtrați cu un set mare de valori numerice.

Vă permite să setați explicit tipul de valori numerice în virgulă mobilă. Operandul este o valoare de varf in functie de sintaxa specificata in sectiunea Expresii cu markeri in FQL.

Conversiile de tip explicite sunt opționale și de obicei nu sunt necesare. Tipul termenului de interogare este determinat în funcție de tipul proprietății gestionate numeric țintă.

float ()

Următoarea expresie se potrivește cu toate rândurile din tabelul anterior.

(pisică, câine, vulpe, lup, N = 5)

notițe

Recomandări privind distanța dintre termenii NEAR / ONEAR

Parametrul N indică numărul maxim de cuvinte care pot fi găsite între termenii de interogare din segmentul de potrivire al elementului. Dacă NEAR ONEAR sau cuprind mai mult de doi operanzi, numărul maxim de cuvinte care ar putea fi între acești termeni de interogare (N) se calculează în segmentul elementul care conține toți termenii sau NEAR ONEAR.

NEAR sau ONEAR lucrează în text cu marcare. Acest lucru înseamnă că, caractere speciale, cum ar fi o virgulă ( „«), punctul zecimal, două puncte ( «:») (».“) Sau o virgulă ( «;») va fi tratat ca un spațiu. Termenul "distanță" se referă la marcatorii din textul indexat.

Dacă utilizați ONEAR sau NEAR cu operanzi egali, operatorul va funcționa după cum urmează:

Această interogare va reveni întotdeauna la adevărat. dacă cel puțin o instanță de "a" apare în context. În plus, aceasta înseamnă că NEAR nu poate fi folosit ca o declarație COUNT. Pentru mai multe informații despre numărarea numărului de termeni, consultați instrucțiunea COUNT.

NEAR. aplicate la fraze, vor corespunde, de asemenea, expresiilor care se suprapun în text.

Dacă markerul din segmentul de potrivire corespunde mai multor operanzi ale expresiei NEAR sau ONEAR. cererea poate fi satisfăcută chiar dacă numărul de marcatori neconformiști din segmentul corespunzător depășește valoarea "N" în expresia declarației NEAR sau ONEAR. De exemplu, suprapunerile pot fi expresii suprapuse. În cazul în care numărul de markeri se suprapun corespondențelor - „O“, cererea va fi îndeplinită în cazul în care segmentul corespunzător al elementului nu este mai mult decât „N + O“ markeri nepotrivite.

Operatorul NOT nu poate fi utilizat în instrucțiunile NEAR sau ONEAR. Următorul exemplu este un exemplu de sintaxă incorectă FQL:

Returnează elemente care nu se potrivesc cu operandul. Un operand poate fi orice expresie FQL valabilă.

Acest parametru este un număr pozitiv care indică greutatea termenului pentru evaluarea dinamică.

Când este clasat, termenul cu o valoare mai mică a greutății este mai mic, termenul cu o valoare mai mare este mai mare. Dacă greutatea termenului este zero, atunci termenul nu afectează ratingul dinamic.

Parametrul de greutate este aplicat tuturor termenilor din expresia STRING.

Greutatea parametrului va afecta numai interogările de index întreg.

Activați sau dezactivați toate funcțiile lingvistice pentru șirul inclus în interogare (lemmatizare, sinonime, verificare ortografie).

Puteți utiliza acest parametru pentru a dezactiva procesarea lingvistică pentru un anumit termen sau șir, dar că termenul sau șirul încă participă la clasament.

Valoarea implicită: "ON"

Acest parametru controlează expresiile cu metacaractere pentru termenii din interior <текстовой строки>. Acest parametru înlocuiește orice setări de metacaractere din parametrii de interogare și vă permite să activați sau să dezactivați caracterele wildcard extinsă în anumite părți ale interogării.

"ON". Indică faptul că caracterul "*" este interpretat ca un caracter wildcard. Simbolul "*" se potrivește cu zero sau mai multe caractere.

"OFF". Indică faptul că caracterul "*" nu este interpretat ca un caracter wildcard.

Valoarea implicită: "ON"

Exemplul 1. Deoarece modul de șir implicit este "PHRASE", toate expresiile de mai jos dau aceleași rezultate.

"ce lumină prin fereastra yonder sparge" șir ("ce lumină prin fereastră", "pauză", "fereastră"

Exemplul 2. Următoarea expresie string a marcatorului și expresia AND returnează aceleași rezultate.

șir ("pisică vulpe pisică", mod = "și") și (pisică, câine, vulpe)

Exemplul 3. Următoarea expresie șir ale marcatorului și expresia OR returnează aceleași rezultate.

șir ("coyote saguaro", mod = "sau") sau (coyote, saguaro)

Exemplul 4. Următoarea expresie de șir a marcatorului și expresia ANY operator revin aceleași rezultate.

șir ("coyote saguaro", mod = "orice") orice (coyote, saguaro)

Exemplul 5. Următoarea expresie string a marcatorului și expresia de expresie NEAR returnează aceleași rezultate.

șir ("coyote saguaro", mod = "aproape") lângă (coyote, saguaro)

Exemplul 6. Următoarea expresie de șir ale marcatorului și expresia declarației NEAR returnează aceleași rezultate.

(cat, câine, vulpe, lup, N = 4)

Exemplul 7. Următoarea expresie string a marcatorului și expresia de expresie ONEAR returnează aceleași rezultate.

string ("pisică vulpea de pisică", mod = "onear") onear (pisică, câine, vulpe, lup)

Exemplul 8. Următorul expresie marcator șir corespunde cuvântului „nobler“ cu funcție dezactivată lingvistică, însă alte forme ale acestui cuvânt (de exemplu, „înnobilarea“) nu sunt comparate cu separarea rădăcinilor.

Exemplul 9. Următoarea expresie corespunde elementelor care conțin cuvântul "pisică" sau "câine", dar ratingul dinamic pentru elementele cu apariția cuvântului "câine" crește mai mult decât pentru elementele cu apariția cuvântului "pisică".

sau (șir ("pisică", greutate = "200"), șir ("câine", greutate = "500"))

notițe

Ponderea relevantă pentru clasarea dinamică

Parametrul de greutate este în primul rând pentru interogările OR. În plus, poate afecta ușor interogările AND. Algoritmul de evaluare dinamic implică faptul că diferiți termeni sunt implicați în procesul de clasificare diferit în funcție de locul în care termenul apare în meci.

Diferențele în gradul de implicare în rating se bazează pe frecvența termenilor și frecvența inversă a elementelor. De exemplu:

Interogare: și (șir ("a"), șir ("b", greutate = 200)).

Schema indexului: Ponderea proprietății de titluri gestionate este mai mare decât ponderea proprietății organismului administrat.

Elementul index 1 conține termenul "a" din proprietatea "title" și termenul "b" din proprietatea "body".

Elementul index 2 conține termenul "a" din proprietatea "corp" și termenul "b" din proprietatea "titlu".

În acest exemplu, elementul 2 va obține un rating global mai ridicat, deoarece elementele cu implicare mai mare în ratingul dinamic obțin o creștere chiar mai ridicată.

Creșterea relativă a termenilor (pozitivă sau negativă) se aplică componentelor din ratingul dinamic al ratingului global. Cu toate acestea, calculul creșterii distanței (distanța dintre cuvinte) nu depinde de greutatea termenilor. Greutatea relativă nu înseamnă întotdeauna că ratingul global pentru acest element variază în funcție de procentele specificate.

Următorul interogare va căuta termenii "peter", "paul" sau "mary", unde semnificația termenului "peter" va fi de două ori mai mare decât semnificația celorlalți doi termeni.

sau (peter, șir ("paul mary", mod = "OR", greutate = 50))

Procesarea șirurilor cu caractere speciale

Caractere speciale, cum ar fi o virgulă ( " "), punct și virgulă ( ';'), două puncte ( ":"), punctul zecimal, semnul minus ( "-"), subliniere ( "_") sau (".") o bară oblică ( „/“), considerat un spațiu gol în interiorul șir care este ghilimele duble. Acest lucru se aplică procesului de selecție a markerilor. Acestea implică, de asemenea, o implicită fonație a marcatorilor separați de aceste simboluri.

Următoarele expresii de interogare sunt echivalente:

titlu: string ( "animale păsări", mode = "fraza") titlu: "animale / păsări" titlu: string ( "animale / păsări", modul = "și") titlu: string ( "animale / păsări", modul = „sau“)

Următoarele expresii de interogare sunt echivalente:

titlu: sau (string ( "animale pasari", mode = "expresie"), string ( "animale insecte", mode = "expresie")) titlu: string ( "animale / pasari animale / insecte", mode = "sau" )

Următoarele expresii de interogare sunt echivalente:

corp: string ("help contoso com", mod = "frază") corp: string ("[email protected]")

Match phrase împărțit de markeri

Puteți căuta o linie de marcaj exact folosind instrucțiunea STRING cu mode = "phrase" sau cu instrucțiunea PHRASE.

Toate aceste operațiuni peste fraze înseamnă potrivirea unei fraze împărțite de markeri. Acest lucru înseamnă că, caractere speciale, cum ar fi o virgulă ( ""), punct și virgulă ( ';'), două puncte ( ":"), de subliniere ( "_"), minus ( "-") sau slash înainte ( "/") sunt considerate un spațiu. Acest lucru se aplică procesului de selecție a markerilor.

Creșterea rangului dinamic al elementelor se bazează pe apariția anumitor termeni în expresia de potrivire fără a schimba elementele corespunzătoare interogării. Expresia XRANK constă dintr-o singură componentă, care ar trebui să satisfacă expresia (expresia meci) și una sau mai multe componente care sunt implicate numai în clasament dinamic (expresie rang). Pentru ca expresia XRANK să fie valabilă, cel puțin unul dintre parametri trebuie să fie specificat pentru aceasta, cu excepția n.

Expresiile de potrivire pot fi orice expresie FQL valabilă, inclusiv expresiile imbricate XRANK. Expresiile de rang pot fi orice expresie FQL valabilă fără expresia XRANK. Dacă interogările dvs. FQL au mai multe declarații XRANK. expresia finală a ratingului dinamic este calculată ca suma creșterilor pentru toți operatorii XRANK.

xrank ( [ ] *, rang-parametru [, rang-parametru] *)

Articole similare