Eseguire ricerche nelle proprietà dei documenti con elenchi delle proprietà di ricerca

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di Azure

Puoi configurare un indice full-text per supportare ricerche con ambito limitato a proprietà specifiche, ad esempio Author e Title, per i tipi di documento supportati in una colonna di dati binari varbinary(max) (incluso FILESTREAM) o image. Senza questa configurazione, le query a testo completo effettuano ricerche generiche sull'intero documento, senza distinguere il contenuto delle proprietà dal contenuto del corpo. Questa forma di ricerca limitata alle proprietà è nota come ricerca per proprietà.

La possibilità di usare la ricerca basata su proprietà in un tipo specifico di documento è determinata dal filtro (IFilter) associato. Per alcuni tipi di documento, il filtro IFilter associato estrae alcune o tutte le proprietà definite per quel tipo di documento, nonché il contenuto del corpo del documento. È possibile configurare un indice a testo completo per supportare la ricerca di proprietà solo su proprietà estratte da un IFilter durante l'indicizzazione a testo completo. Tra gli IFilter che estraggono diverse proprietà di documenti ci sono gli IFilter per i tipi di documenti di Microsoft Office (come .docx, .xlsx, e .pptx). D'altra parte, l'IFilter XML non emette proprietà.

Come funziona Full-Text Search con le proprietà di ricerca

Full-Text Search supporta la ricerca di proprietà assegnando un ID interno a ciascuna proprietà registrata e memorizzando tali ID nell'indice a testo completo.

ID delle proprietà interne

Il Motore Full-Text assegna arbitrariamente un ID interno a ogni proprietà registrata, identificando univocamente la proprietà nell'elenco di ricerca specifico di cui fa parte. Pertanto, se una proprietà viene aggiunta a più elenchi di proprietà di ricerca, è probabile che l'ID di proprietà interno sia diverso nei diversi elenchi.

Quando si registra una proprietà per un elenco di ricerca, a tale proprietà viene arbitrariamente assegnato un ID di proprietà interno da parte del motore di ricerca full-text. L'ID di proprietà interno è un valore di tipo integer che identifica in modo univoco la proprietà in tale elenco di proprietà di ricerca.

Nella figura seguente viene illustrata una vista logica di un elenco di proprietà di ricerca in cui sono specificate due proprietà, Title e Keywords. Il nome della lista delle proprietà per Keyword è Tags. Queste proprietà appartengono allo stesso insieme di proprietà, il cui GUID è f29f85e0-4ff9-1068-ab91-08002b27b3d9. Gli identificatori di tipo integer della proprietà sono 2 per Title e 5 per Tags (Keywords). Il motore Full-Text assegna arbitrariamente ogni proprietà a un ID di proprietà interno univoco per l'elenco di proprietà di ricerca. L'ID di proprietà interno per la proprietà Title è 1, mentre per la proprietà Tags è 2.

Schermata della mappatura dell'elenco delle proprietà di ricerca in una tabella interna.

È probabile che l'ID di proprietà interno sia diverso dall'identificatore intero della proprietà. Se una determinata proprietà viene registrata in più elenchi di proprietà di ricerca, è possibile che a ciascun elenco di proprietà di ricerca venga assegnato un ID di proprietà interno. L'ID di proprietà interno potrebbe essere, ad esempio, 4 in un elenco di proprietà di ricerca, 1 in un altro, 3 in un altro ancora e così via. Al contrario, l'identificatore di tipo integer della proprietà è intrinseco della proprietà stessa e rimane uguale ovunque venga utilizzata la proprietà.

Indice delle proprietà registrate

Dopo l'associazione di un indice full-text a un elenco di proprietà di ricerca, è necessario ripopolare l'indice per indicizzare i termini di ricerca specifici della proprietà. Durante l'indicizzazione full-text, il contenuto di tutte le proprietà viene archiviato nell'indice full-text insieme ad altro contenuto. Quando tuttavia si indicizza un termine di ricerca trovato in una proprietà registrata, tramite l'indicizzatore full-text viene archiviato insieme al termine anche il corrispondente ID di proprietà interno. Al contrario, se una proprietà non è registrata, viene memorizzata nell'indice a testo completo come se facesse parte del corpo del documento, e ha un valore zero per l'ID interno della proprietà.

Nella figura seguente viene illustrata una vista logica di come vengono visualizzati i termini di ricerca in un indice full-text associato all'elenco di proprietà di ricerca illustrato nella figura precedente. Un documento di esempio, Documento 1, contiene tre proprietà (Titolo, Autore e Parole Chiave), oltre al corpo del documento. Per le proprietà Titolo e Parole chiave, specificate nell'elenco di proprietà di ricerca, i termini di ricerca sono associati ai corrispondenti ID di proprietà interni nell'indice a testo pieno. Al contrario, il contenuto della proprietà Author viene indicizzato come se fosse parte del corpo del documento. Ciò significa che la registrazione di una proprietà aumenta le dimensioni dell'indice full-text, a seconda della quantità di contenuto archiviata nella proprietà.

Schermata di un indice full-text che utilizza un elenco di proprietà di ricerca.

I termini di ricerca nella proprietà Titolo (Favorite, Biking, e Trails) sono associati all'ID interno della proprietà assegnato al Titolo per questo indice, 1. I termini di ricerca nella proprietà Parole chiave (biking e mountain) sono associati all'ID interno della proprietà assegnato ai Tag per questo indice, 2. Per i termini di ricerca nella proprietà Author (Jane e Doe) e i termini di ricerca nel corpo del documento, l'ID interno della proprietà è 0. Il termine biking compare nella proprietà Titolo, nella proprietà Parole Chiave (Tag) e nel corpo del documento. Una ricerca di biking proprietà nella proprietà Titolo o Parole chiave (Tag) restituirebbe questo documento nei risultati. Una query generica a testo completo per biking restituirebbe anche questo documento, come se l'indice non fosse configurato per la ricerca di proprietà. Una ricerca di biking nella proprietà Autore non restituirebbe questo documento.

In una query full-text limitata alle proprietà vengono utilizzati gli ID di proprietà interni registrati per l'elenco corrente delle proprietà di ricerca dell'indice full-text.

Impatto dell'abilitazione della ricerca immobiliare

La configurazione di un indice full-text per supportare la ricerca basata su una o più proprietà aumenta le dimensioni dell'indice, a seconda del numero di proprietà specificate nell'elenco di proprietà di ricerca e del contenuto di ogni proprietà.

Nel testare i corpusi tipici di documenti Microsoft Word, Excel e PowerPoint, è stato configurato un indice a testo completo per indicizzare le proprietà tipiche di ricerca. L'indicizzazione di queste proprietà ha aumentato la dimensione dell'indice del testo completo di circa il 5 percento. Questo aumento approssimativo di dimensioni è probabilmente tipico della maggior parte dei corpusi documentali. Tuttavia, in definitiva, l'aumento di dimensione dipende dalla quantità di dati di proprietà in un dato corpus documentale rispetto alla quantità complessiva di dati.

Per abilitare la ricerca immobiliare, crea una lista di proprietà di ricerca, aggiungi una o più proprietà all'elenco e poi associa la lista a un indice a testo completo.

Crea una lista di proprietà di ricerca

Crea una lista di proprietà di ricerca usando Transact-SQL o SQL Server Management Studio.

Creare un elenco di proprietà di ricerca in Transact-SQL

Usa la CREATE SEARCH PROPERTY LIST dichiarazione e fornisci almeno un nome per la lista.

Crea una lista delle proprietà di ricerca in SQL Server Management Studio

  1. In Esplora oggetti, espandere il server.

  2. Espandi Database, quindi espandi il database per creare l'elenco di proprietà di ricerca.

  3. Espandi Archiviazione, quindi fare clic con il pulsante destro del mouse su Elenchi di proprietà di ricerca.

  4. Selezionare Nuovo elenco di proprietà di ricerca.

  5. Specificare il nome dell'elenco di proprietà.

  6. Facoltativamente, specificare un altro utente come proprietario dell'elenco di proprietà.

  7. Selezionare una delle seguenti opzioni:

    • Crea un elenco di proprietà di ricerca vuoto

    • Crea da un elenco di proprietà di ricerca esistente

    Per altre informazioni, vedere CREATE SEARCH PROPERTY LIST.

  8. Seleziona OK.

Aggiungi proprietà a una lista di ricerca

La ricerca basata su proprietà richiede la creazione di un elenco di proprietà di ricerca e l'indicazione di una o più proprietà in cui è possibile eseguire la ricerca. Quando si aggiunge una proprietà a un elenco di proprietà di ricerca, la proprietà viene registrata per quel particolare elenco. Per aggiungere una proprietà a un elenco di proprietà di ricerca sono necessari i valori seguenti:

  • Set di proprietà GUID

    Ogni proprietà di ricerca appartiene al singolo set di proprietà che contiene un gruppo di proprietà correlate. Ogni set di proprietà viene identificato da un identificatore univoco globale (GUID).

  • Identificatore di tipo integer della proprietà

    Ogni proprietà di ricerca possiede un identificatore univoco all'interno del set di proprietà. Per una determinata proprietà, l'identificatore può essere un tipo integer o una stringa, tuttavia la ricerca full-text supporta solo identificatori di tipo integer.

  • Nome della proprietà

    Questo è il nome che gli utenti specificheranno nelle query full-text per cercare nella proprietà. Un nome di proprietà può contenere spazi interni. La lunghezza massima consentita è di 256 caratteri.

    Il nome di proprietà può essere uno dei seguenti:

    • Il nome canonico di Windows della proprietà, come System.Author o System.Contact.HomeAddress.

    • Un nome intuitivo e facile da ricordare per i tuoi utenti. Alcune proprietà sono associate a un nome descrittivo noto, ad esempio "Autore" o "Indirizzo abitazione", ma è possibile specificare qualsiasi nome appropriato per gli utenti.

    Nota

    Una determinata combinazione di GUID del set di proprietà e di identificatore di proprietà deve essere univoca in una determinata lista delle proprietà di ricerca. Questo significa che non puoi aggiungere la stessa proprietà più di una volta con nomi o descrizioni diverse.

  • Descrizione (facoltativo)

    Quando si aggiunge una proprietà di ricerca a un elenco di proprietà di ricerca, è possibile fornire una descrizione facoltativa. Ad esempio, potresti voler fornire informazioni su una proprietà che non sono evidenti dal nome, oppure potresti voler descrivere l'insieme delle proprietà della proprietà.

Ottieni i valori per una lista di proprietà di ricerca

Vedi Trovare i GUID dei set di proprietà e gli ID interi delle proprietà per le proprietà di ricerca.

Aggiungi una proprietà a una lista di ricerca in Transact-SQL

Usa l'istruzione ALTER SEARCH PROPERTY LIST con i valori che hai ottenuto tramite uno dei metodi descritti nell'articolo Trovare i GUID dei set di proprietà e gli ID interi delle proprietà per le proprietà di ricerca.

Nell'esempio seguente viene illustrato l'utilizzo di questi valori in caso di aggiunta di una proprietà a un elenco di proprietà di ricerca:

ALTER SEARCH PROPERTY LIST DocumentTablePropertyList
ADD 'Title' WITH (
    PROPERTY_SET_GUID = 'F29F85E0-4FF9-1068-AB91-08002B27B3D9',
    PROPERTY_INT_ID = 2,
    PROPERTY_DESCRIPTION = 'System.Title - Title of the item.'
);

Aggiungi una proprietà a una lista delle proprietà di ricerca in SQL Server Management Studio

Utilizzare la finestra di dialogo Elenco delle Proprietà di Ricerca per aggiungere e rimuovere proprietà di ricerca. È possibile trovare Elenchi di proprietà di ricerca in Esplora oggetti nel nodo Archiviazione del database associato.

Associa una lista di proprietà di ricerca a un indice a testo completo

Perché un indice full-text supporti la ricerca sulle proprietà registrate in un elenco di proprietà di ricerca, è necessario associare l'elenco all'indice e poi ripopolare quest'ultimo. Il ripopolamento dell'indice full-text consente di creare voci di indice specifiche della proprietà per i termini di ricerca in ognuna delle proprietà registrate.

Finché l'indice a testo completo rimane associato a questa lista delle proprietà di ricerca, una query a testo completo può utilizzare l'opzione PROPERTY del CONTAINS predicato per cercare sulle proprietà registrate per quella lista di proprietà.

Se si modifica l'elenco di proprietà di ricerca associato a un indice full-text, sarà necessario ricompilare l'indice per ripristinarne lo stato coerente. L'indice viene troncato immediatamente e rimane vuoto fino al termine del popolamento completo. Per ulteriori informazioni su quando la modifica dell'elenco delle proprietà di ricerca comporta la ricompilazione dell'indice, vedere "Osservazioni" in ALTER FULLTEXT INDEX.

Associa una lista di proprietà di ricerca a un indice a testo completo in Transact-SQL

Usa l'istruzione ALTER FULLTEXT INDEX con la clausola SET SEARCH PROPERTY LIST = <property_list_name>.

Associa una lista delle proprietà di ricerca a un indice a testo completo in SQL Server Management Studio

Specificare un valore per Elenco delle proprietà di ricerca nella scheda Generale della finestra di dialogo Proprietà di indicizzazione full-text.

Eseguire query sulle proprietà di ricerca con CONTAINS

Di seguito è riportata la sintassi di base di CONTAINS per una query full-text con ambito proprietà:

SELECT column_name
FROM table_name
WHERE CONTAINS (PROPERTY(column_name, 'property_name'), '<contains_search_condition>');

La query seguente, ad esempio, esegue la ricerca di una proprietà indicizzata, Title, nella colonna Document della tabella Production.Document del database AdventureWorks . La query restituisce solo documenti la cui proprietà Title contiene la stringa Maintenance o Repair.

USE AdventureWorks2025;
GO

SELECT Document
FROM Production.Document
WHERE CONTAINS (PROPERTY(Document, 'Title'), 'Maintenance OR Repair');
GO

Nell'esempio si presuppone che il filtro IFilter per il documento estragga la proprietà Title, che la proprietà Title venga aggiunta all'elenco di proprietà di ricerca e che tale elenco sia associato all'indice full-text.

Gestisci le liste di proprietà di ricerca

Dopo aver creato una lista delle proprietà di ricerca, puoi visualizzarla, modificarla o eliminarla.

Visualizza e modifica una lista di proprietà di ricerca

Visualizza e modifica una lista di proprietà di ricerca usando Transact-SQL o SQL Server Management Studio.

Visualizza e modifica una lista di proprietà di ricerca in Transact-SQL

Usa la ALTER SEARCH PROPERTY LIST dichiarazione per aggiungere o rimuovere proprietà di ricerca.

Visualizza e modifica una lista delle proprietà di ricerca in SQL Server Management Studio

  1. In Esplora oggetti, espandere il server.

  2. Espandi Database, quindi espandi il database.

  3. Espandi Archiviazione.

  4. Espandi Elenchi di proprietà di ricerca per visualizzare gli elenchi di proprietà di ricerca.

  5. Fare clic con il pulsante destro del mouse sull'elenco di proprietà, quindi scegliere Proprietà.

  6. Nella finestra di dialogo dell' editor dell'elenco delle proprietà di ricerca usare la griglia Proprietà per aggiungere o rimuovere proprietà di ricerca:

    1. Per rimuovere una proprietà di documento, seleziona l'intestazione della riga a sinistra della proprietà e premi DEL.
  7. Per aggiungere una proprietà document, seleziona la riga vuota in fondo alla lista, a destra del *, e inserisci i valori della nuova proprietà.

    Per informazioni su questi valori, vedere Editor dell'elenco delle proprietà di ricerca. Per informazioni su come ottenere questi valori per le proprietà definite da Microsoft, vedere Trovare i GUID dei set di proprietà e gli ID interi delle proprietà per le proprietà di ricerca. Per informazioni sulle proprietà definite da un fornitore di software indipendente (ISV, Independent Software Vendor), vedere la documentazione di tale fornitore.

  8. Seleziona OK.

Elimina una lista di proprietà di ricerca

Non puoi eliminare una lista delle proprietà da un database mentre la lista è associata a un indice a testo completo.

Elimina una lista di proprietà di ricerca in Transact-SQL

Usare l'istruzione DROP SEARCH PROPERTY LIST .

Elimina una lista di proprietà di ricerca in SQL Server Management Studio

  1. In Esplora oggetti, espandere il server.

  2. Espandi Database, quindi espandi il database.

  3. Espandi Archiviazione, quindi espandi il nodo Elenchi di proprietà di ricerca.

  4. Clicca con il tasto destro sulla lista delle proprietà che vuoi eliminare e seleziona Elimina.

  5. Seleziona OK.