Welcome to Sign in | Help
in Search

Cautare full text contains(Name, '"n*"') intoarce si numere

Last post 07-03-2008, 1:27 PM by alexandrul. 18 replies.
Page 1 of 2 (19 items)   1 2 Next >
Sort Posts: Previous Next
  •  06-17-2008, 3:22 PM 5110

    Cautare full text contains(Name, '"n*"') intoarce si numere

    Am in aplicatie o cautare pe index full-text. Daca string-ul cautat este "n", ceea ce se traduce in

    Contains(Name, '"n*"')

    cautarea intoarce si numere si campurile care incep cu litera n. As dori sa intorc doar campurile care contin litera 'n', nu si campurile care contin doar cifre.

    Banuiesc ca are loc un fel de pattern matching care trebuie escapat, dar nu am gasit nicaieri in documentatie ceva care sa ma indrume in directia corecta.

    Cautarea cu orice alta litera se comporta normal.

    Apreciez orice sugestie.

    Mersi,
          Alex
  •  06-17-2008, 4:50 PM 5111 in reply to 5110

    Re: Cautare full text contains(Name, '"n*"') intoarce si numere

    ---Scuze - idee proasta...

    Ignat Andrei
    http://serviciipeweb.ro/iafblog
  •  06-17-2008, 4:57 PM 5112 in reply to 5110

    Re: Cautare full text contains(Name, '"n*"') intoarce si numere

    Conditia ta ar trebui sa se refere la acele "names" care contin cuvinte incepand cu "n". Incearca de exemplu ...WHERE [Name] LIKE 'n%' pentru acest gen de cautari (---> nume care incep cu "n"; sortari alfabetice).

    * Intr-adevar cautarea cu '"n*"' pare sa nu dea rezultatele asteptate...

  •  06-17-2008, 6:50 PM 5113 in reply to 5112

    Re: Cautare full text contains(Name, '"n*"') intoarce si numere

    Multumesc pentru raspuns.

    Intr-adevar, o varianta este sa folosesc LIKE in acest caz, dar as prefera sa implementez cazul general...

    Pe de alta parte, am devenit curios cu privire la aceasta problema ;-).
  •  06-21-2008, 11:59 AM 5156 in reply to 5113

    Re: Cautare full text contains(Name, '"n*"') intoarce si numere

    ai incercat sa impachetezi query-ul intr-o procedura stocata si sa transmiti string-ul cautat sub forma unui parametru?
  •  06-21-2008, 7:26 PM 5157 in reply to 5156

    Re: Cautare full text contains(Name, '"n*"') intoarce si numere

    Multumesc pentru raspuns.

    Chiar asa este implementat, si nu exista nici o diferenta de rezultat intre query-ul normal si cel dintr-o procedura stocata - am testat.

    Alex
  •  06-23-2008, 7:44 AM 5158 in reply to 5157

    Re: Cautare full text contains(Name, '"n*"') intoarce si numere

    Daca am inteles bine tu vrei sa afisezi toate numele care incep cu n si nu contin caractere numerice .In acest caz patternul asta de regexp e ce -ti trebuie

    "^n([a-z]|[A-Z])+"

    Din ceaa ce stiu eu sql2005 nu permite sa specifici regexpuri in interogari.

    O solutie mai complicata ar fi sa-ti scrii un functie clr in care sa folosesti regexp iar apoi sa faci deploymentul acestei unctii pe sql server.

    Uite aici o clasa dot net care contine o asemenea functie

    using System;

    using System.Collections.Generic;

    using System.Text.RegularExpressions;

    using System.Data;

    using System.Data.Sql ;

    using Microsoft.SqlServer.Server ;

    using System.Data.SqlTypes ;

     

     

    public class regexpuri

    {

    [Microsoft.SqlServer.Server.SqlFunction]

    public static bool potrivire(string text)

    {

    return Regex.IsMatch(text, "^n([a-z]|[A-Z])+");

    }

    }

    Compilezi dll -ul asta apoi faci pasii:

    1 enable clr execution

    sp_configure 'clr enabled', 1

    go

    reconfigure

    go

    2

    CREATE ASSEMBLY regexpuri from 'calea catre dll\regexpuri.dll' WITH PERMISSION_SET = SAFE

    3

    create function match (@text as nvarchar(MAX) )returns bit

    as external name regexpuri.regexpuri.potrivire

    4 testezi functia

    SELECT [numele bazei de date in care ai creat functia assmbly].[dbo].[match] (

    'naaaa')


    Secolul XXI ori va fi religios ori nu va fi deloc
  •  06-23-2008, 10:48 AM 5159 in reply to 5157

    Re: Cautare full text contains(Name, '"n*"') intoarce si numere

    Am gasit o ocolire a problemei, am postat-o aici: http://asimilatorul.com/ pentru a mai da o sansa rezultatului discutiei de aici: http://ronua.ro/CS/forums/thread/205093.aspx
  •  06-23-2008, 10:50 AM 5160 in reply to 5159

    Re: Cautare full text contains(Name, '"n*"') intoarce si numere

    Sau mai pe scurt: SELECT * FROM tabela WHERE CONTAINS(camp, '"n*"') AND NOT CONTAINS(camp, '"nn*"');
  •  06-23-2008, 11:35 AM 5161 in reply to 5160

    Re: Cautare full text contains(Name, '"n*"') intoarce si numere

    Multumesc pentru raspunsuri.


    Nu stiam ca query-ul CONTAINS(camp, '"nn*"') intoarce numere, si tot n-am inteles de ce CONTAINS(camp, '"n*"') intoarce numere, dar asta e solutia pe care o cautam. Mersi mult!

    Alex
  •  06-24-2008, 12:48 PM 5166 in reply to 5160

    Re: Cautare full text contains(Name, '"n*"') intoarce si numere

    alexandrul:
    Sau mai pe scurt: SELECT * FROM tabela WHERE CONTAINS(camp, '"n*"') AND NOT CONTAINS(camp, '"nn*"');


    Totuşi, această soluţie exclude o valoare de genul "Nume 123", care ar trebui să fie inclusă în rezultatul obţinut.

    Răzvan
  •  06-24-2008, 7:53 PM 5168 in reply to 5166

    Re: Cautare full text contains(Name, '"n*"') intoarce si numere

    in cazul asta ramane varianta cu regexpul Big Smile

    Secolul XXI ori va fi religios ori nu va fi deloc
  •  06-25-2008, 9:32 AM 5170 in reply to 5166

    Re: Cautare full text contains(Name, '"n*"') intoarce si numere

    rsocol:

    Totuşi, această soluţie exclude o valoare de genul "Nume 123", care ar trebui să fie inclusă în rezultatul obţinut.

    Răzvan


    Corect. Am gasit o sintaxa suficient de ciudata incat sa intoarca si "n... 23649365" sau "326598 n...", dar nu intoarce "nn...", pe care am postat-o aici: http://asimilatorul.com/

    Nu am gasit nici un fel de documentatie despre modul de folosire a caracterelor speciale pentru FTS, si nu stiu de ce merge ceea ce am gasit, dar daca cineva gaseste ceva documentatie oficiala pentru aceste cazuri, as aprecia un link.
  •  06-25-2008, 4:03 PM 5172 in reply to 5170

    Re: Cautare full text contains(Name, '"n*"') intoarce si numere

    Sau:

    SELECT ProductID, [Name] FROM Product

    WHERE CONTAINS([Name], '("n*" AND NOT "nn*") OR "n^n*"')

     

  •  07-03-2008, 9:05 AM 5240 in reply to 5172

    Re: Cautare full text contains(Name, '"n*"') intoarce si numere

    Am "dat mai departe" intrebarea pe unul dintre newsgroup-urile Microsoftului ("microsoft.public.sqlserver.fulltext"). Acest "comportament" este dat de felul in care sunt stocate numerele in indexul full-text (de exemplu 123 ---> NN123) si de "wordbreakers".
Page 1 of 2 (19 items)   1 2 Next >
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems