Egy másik szóhoz közeli szavak keresése a NEAR használatával

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseAzure SQL felügyelt példány

A közelségi kifejezésNEAR használható a CONTAINS predikátumban vagy a CONTAINSTABLE függvényben, hogy szavakat vagy kifejezéseket keressen, amelyek közel vannak egymáshoz.

A NEAR áttekintése

NEAR a következő funkciókkal rendelkezik:

  • Megadhatja az első és az utolsó keresési kifejezéseket elválasztó nem keresési kifejezések maximális számát.

  • Bármilyen sorrendben kereshet szavakat vagy kifejezéseket, vagy adott sorrendben kereshet szavakat és kifejezéseket.

  • Megadhatja a nem keresési kifejezések maximális számát, vagy a maximális távolság, amely elválasztja az első és az utolsó keresési kifejezést, hogy egyezés jöhessen létre.

  • Ha megadja a kifejezések maximális számát, megadhatja azt is, hogy az egyezésnek tartalmaznia kell a keresési kifejezéseket a megadott sorrendben.

Az egyezésnek való minősítéshez a szöveg sztringjének a következőnek kell lennie:

  • Kezdje a megadott keresési kifejezések egyikével, és a másik megadott keresési kifejezés egyikével végződik.

  • Tartalmazza az összes megadott keresési kifejezést.

  • Ha a maximális távolság meg van adva, az első és az utolsó keresési kifejezés között előforduló nem keresési kifejezések ( beleértve a stopwordst is) száma nem lehet kisebb vagy egyenlő a maximális távolságnál.

A NEAR szintaxisa

A NEAR alapszintaxisa a következő:

 NEAR (  
  
 {  
  
 *search_term* [ ,...*n* ]  
  
 |  
  
 (*search_term* [ ,...*n* ] ) [, <maximum_distance> [, <match_order> ] ]  
  
 }  
  
 )  

A szintaxissal kapcsolatos további információkért lásd: CONTAINS (Transact-SQL).

Példák

1. példa

A "John" kifejezésre például a "Smith" két kifejezésén belül kereshet, az alábbiak szerint:

... CONTAINS(column_name, 'NEAR((John, Smith), 2)')

Néhány példa a sztringekre, amelyek egyeznek: "John Jacob Smith" és "Smith, John". A "John Jones knows Fred Smith" sztring három keresést nem érintő kifejezést tartalmaz, ezért nem egyezik.

Ha azt szeretné, hogy a feltételek a megadott sorrendben legyenek megadva, módosítsa a példa közelségi kifejezést NEAR((John, Smith),2, TRUE). Ez a "John" kifejezésre keres a "Smith" két kifejezésén belül, de csak akkor, ha a "John" előzi meg a "Smith" kifejezést. Balról jobbra író nyelvekben, mint például az angol, egy karakterláncra példa a "John Jacob Smith".

Vegye figyelembe, hogy a jobbról balra író nyelveknél, például az arab vagy a héber nyelvnél a Full-Text motor fordított sorrendben alkalmazza a megadott kifejezéseket. Az SQL Server Management Studióban az Object Explorer automatikusan megfordítja a jobbról balra író nyelvekben megadott szavak megjelenítési sorrendjét.

2. példa

Az alábbi példa a Production.Document mintaadatbázis AdventureWorks táblájában keres minden olyan dokumentum-összefoglalót, amely ugyanabban a dokumentumban tartalmazza a "reflektor" szót, mint a "zárójel" szót.

SELECT DocumentNode, Title, DocumentSummary  
FROM Production.Document AS DocTable   
INNER JOIN CONTAINSTABLE(Production.Document, Document,  
  'NEAR(bracket, reflector)' ) AS KEY_TBL  
  ON DocTable.DocumentNode = KEY_TBL.[KEY]  
WHERE KEY_TBL.RANK > 50  
ORDER BY KEY_TBL.RANK DESC;  
GO  

A maximális távolság mérése

Egy adott maximális távolság (például 10 vagy 25) határozza meg, hogy egy adott sztring első és utolsó keresési kifejezései között hány nem keresési kifejezés ( beleértve a stopwordst is) fordulhat elő. A NEAR((dogs, cats, "hunting mice"), 3) például a következő sort adja vissza, amelyben a nem keresési kifejezések teljes száma három ("enjoy", "but" és "avoid"):

"Catshunting mice``, but avoidenjoydogs``."

Ugyanez a közelségi kifejezés nem a következő sort adja vissza, mert a maximális távolságot a négy nem keresési kifejezés ("enjoy", "but", "usually" és "avoid" ) túllépi:

"Catshunting mice``, but usually avoidenjoydogs``."

A NEAR kombinálása más kifejezésekkel

Kombinálhatja a NEAR-t más kifejezésekkel. Az AND (&), OR (|) vagy a NOT (&!) használatával kombinálhat egy egyéni közelségi kifejezést egy másik egyéni közelségi kifejezéssel, egy egyszerű kifejezéssel vagy egy előtaggal. Például:

  • CONTAINS('NEAR((term1; term2),5) AND term3')

  • CONTAINS('NEAR((term1; term2),5) OR term3')

  • CONTAINS('NEAR((term1, term2),5) ÉS NEM term3')

  • CONTAINS('NEAR((term1; term2),5) AND NEAR(term3, term4),2)')

  • CONTAINS('NEAR((term1, term2),5) VAGY NEAR((kifejezés3, kifejezés4),2, IGAZ)')

Például

CONTAINS(column_name, 'NEAR((term1, term2), 5, TRUE) AND term3')  

A NEAR nem kombinálható generációs kifejezéssel (ISABOUT ...) vagy súlyozott kifejezéssel (FORMSOF ...).

További információ a közelségi keresésekről

  • A keresési kifejezések egymást átfedő előfordulásai

    A közelségi keresések mindig csak nem egymást átfedő előfordulásokat keresnek. A keresési kifejezések egymást átfedő előfordulásai soha nem minősülnek egyezésnek. Vegyük például a következő közelségi kifejezést, amely a "A" és a "AA" kifejezésre keres ebben a sorrendben két kifejezés maximális távolságával:

    CONTAINS(column_name, 'NEAR((A,AA), 2, TRUE)')
    

    A lehetséges találatok a következők: "AAA", "A.AA", és "A..AA". A csak "AA" értéket tartalmazó sorok nem egyeznek.

    Jegyzet

    Megadhat olyan kifejezéseket, amelyek átfedésben vannak, például NEAR("mountain bike", "bike trails") vagy (NEAR(comfort*, comfortable), 5). Az átfedésben lévő kifejezések megadása növeli a lekérdezés összetettségét a lehetséges egyezés-permutációk növelésével. Ha sok ilyen átfedésben lévő kifejezést ad meg, a lekérdezés elfogyhat az erőforrásokból, és meghiúsulhat. Ha ez történik, egyszerűsítse le a lekérdezést, és próbálkozzon újra.

  • A NEAR (függetlenül attól, hogy a maximális távolság meg van-e adva) a kifejezések közötti logikai távolságot jelöli a közöttük lévő abszolút távolság helyett. Például egy bekezdés különböző kifejezéseiben vagy mondataiban lévő kifejezéseket a rendszer az azonos kifejezésben vagy mondatban szereplő kifejezésektől távolabbiként kezeli, függetlenül azok tényleges közelségétől, azzal a feltételezéssel, hogy kevésbé kapcsolódnak egymáshoz. Hasonlóképpen, a különböző bekezdésekben szereplő kifejezések még távolabb vannak egymástól. Ha egy egyezés egy mondat, bekezdés vagy fejezet végét fedi le, a dokumentum rangsorolásához használt rés 8, 128 vagy 1024-gyel nő.

  • A közelségi kifejezések hatása a CONTAINSTABLE függvény szerinti rangsorolásra

    Ha a NEAR függvényt használja a CONTAINSTABLE függvény, a dokumentumokban a találatok száma a hosszához képest, valamint az egyes találatok első és utolsó keresési kifejezésének távolsága befolyásolja az egyes dokumentumok rangsorolását. Ha egy általános közelségi kifejezésről van szó, és a megfeleltethető keresési kifejezések >50 logikai kifejezéssel vannak egymástól, akkor a dokumentumban visszaadott rang 0. Olyan egyéni közelségi kifejezés esetén, amely nem határoz meg egész számot a maximális távolságként, egy olyan dokumentum, amely csak olyan találatokat tartalmaz, amelyek közötti hézag >100 logikai kifejezés, 0-s rangsorolást kap. A további információk az egyéni közelségi keresések rangsorolásáról a következő helyen találhatók: Keresési eredmények korlátozása a RANK.

  • A hangszavak átalakítása kiszolgálói beállítás

    A transzformációs zajszavak értéke befolyásolja, hogyan kezeli az SQL Server a stopwordokat, ha azok a közelségi keresésekben vannak megadva. További információért lásd: zajszóátalakító szerver beállítási opció.