Megosztás a következőn keresztül:


Teljes szöveges keresés használata XML-oszlopokkal

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseAzure SQL-kezelési példány

Létrehozhat egy teljes szöveges indexet az XML-oszlopokon, amely indexeli az XML-értékek tartalmát, de figyelmen kívül hagyja az XML-korrektúrát. A címkéket jel határokként használják. A rendszer a következő elemeket indexeli:

  • Az XML-elemek tartalma.

  • Csak a legfelső szintű elem XML-attribútumainak tartalma, kivéve, ha ezek az értékek numerikus értékek.

Ha lehetséges, a teljes szöveges keresés és az XML-index a következő módon kombinálható:

  1. Először szűrje a fontos XML-értékeket az SQL teljes szöveges keresésével.

  2. Ezután kérdezheti le azokat az XML-értékeket, amelyek XML-indexet használnak az XML-oszlopban.

Példa: Teljes szöveges keresés kombinálása XML-lekérdezéssel

Miután a teljes szöveges index létrejött az XML-oszlopban, az alábbi lekérdezés ellenőrzi, hogy egy XML-érték tartalmazza-e az "egyéni" szót egy könyv címében:

SELECT *
FROM   T
WHERE  CONTAINS(xCol,'custom')
AND    xCol.exist('/book/title/text()[contains(.,"custom")]') = 1;

A contains() metódus a teljes szöveges indexet használja a "testreszabott" szót tartalmazó XML-értékek részhalmazára bárhol a dokumentumban. A exist() záradék biztosítja, hogy a "custom" szó szerepel a könyv címében.

A contains() és az XQuery contains() használó teljes szöveges keresések különböző szemantikával rendelkeznek. Az utóbbi egy részszöveg-egyezés, az előbbi pedig egy szóegyezés, amely szótőredukálást használ. Ezért ha olyan sztringre keresünk, amelynek a címében a "run" szerepel, az egyezések közé tartozik a "run", a "runs" és a "running", mivel a teljes szöveges contains() és az XQuery contains() is teljesül. A lekérdezés azonban nem egyezik a cím "testreszabható" szavával, mivel a teljes szöveges keresés contains() sikertelen, de az XQuery contains() teljesül. A teljes szöveges contains() záradékot általában el kell távolítani a tiszta részkarakterlánc egyezések esetében.

Emellett a teljes szöveges keresés szóalapokra bontást használ, de az XQuery contains() esetében szó szerinti egyezés történik. Ezt a különbséget a következő példában szemlélteti.

Példa: Teljes szöveges keresés XML-értékeken a stemming használatával

Az előző példában végrehajtott XQuery contains() ellenőrzés általában nem távolítható el. Fontolja meg ezt a lekérdezést:

SELECT *
FROM   T
WHERE  CONTAINS(xCol,'run');

A dokumentumban a "futtatott" szó egyezik a keresési feltétellel, mert az eredetből ered. Emellett a keresési környezet nincs ellenőrizve az XQuery használatával.

Ha az XML teljes szöveges indexelt AXSD használatával relációs oszlopokra oszlik, az XML-nézetben előforduló XPath-lekérdezések nem végeznek teljes szöveges keresést az alapul szolgáló táblákon.

Lásd még: