Ho una tabella di ricerca con, diciamo, 4 colonne di dati di testo da cercare.Ricerca FullText con CONTAINS su più colonne e predicato - E
faccio qualcosa di simile:
SELECT * FROM dbo.SearchTable
WHERE CONTAINS((co1, col2, col3, col4), 'term1 AND term2')
Sembra Contiene restituisce solo vero se term1 e term2 sono nella stessa colonna. C'è un modo per specificare che tutte le colonne dovrebbero essere incluse con un AND?
In caso contrario, la mia idea è di JSON tutte le colonne di ricerca e incollarle in una. In questo modo posso eseguire la ricerca nel testo completo, ma estrarre facilmente le singole colonne in .NET. Presumo che l'indicizzatore non abbia problemi con questo e farà a meno dei caratteri JSON e delle virgolette. È corretto?
Grazie
EDIT
Pensando all'idea JSON, il crawler potrebbe anche indicizzare i nomi delle proprietà quindi mi piacerebbe avere rinominare {nome}, {dettagli}, {} long_details a qualcosa come {x1}, {x2}, {x3} per garantire che non vengano scelti in una ricerca. Speriamo che se siano così brevi non sarebbero comunque indicizzati.
EDIT2
posso creare un Stoplist, basato sul sistema stoplist e mettere i nomi di proprietà in quello.
Ciao, grazie. Non mi piace la prima opzione perché dovrei analizzare il termine di ricerca e creare la query dinamicamente (anche io penso di aver letto che, se possibile, le ricerche dovrebbero essere combinate in 1 CONTAINS). Avrei bisogno di leggere di più sulle colonne calcolate. Penso che possano essere persistenti, ma poi conserverei il doppio dei dati. Se non sono persistenti, avrebbe un impatto maggiore sul tempo di interrogazione? –
Tenere presente che la concatenazione di stringhe in SQL in cui uno dei valori è null sostituirà l'intera espressione con null. Puoi risolvere questo problema avvolgendo ogni termine nullable con isnull come "isnull (col, '')". –