Hej Har du testat LIKE? Det kommer ju inte heller att funka för det är inte säkert att borås finns i databasen Att få till en sådan här funktion bra, kan nog vara lite klurigt... Om man skall använda det så måsta man ju göra en Full-Text Indexering eller ? Mmmm, det stämemr nog. Om jag minns rätt så måste man ha full text indexering. Så hur gör man då? Nu vet ju inte jag förstås hur ditt webbhotell fungerar, men rimligt är att du har kontroll över din(a) databaser, men naturligtvis inte kan ändra andras databaser. Så under förutsättninga tt du har kontroll på dina databaser så kan du köra (för att få igång full-text indexering): Så nu har jag gjort en full-text indexering på en column i min tabell som jag skall jämföra imot. Där tror jag indexserverns regler går in. Att ange för få bokstäver, ex 1 st gör att den sparkar rakt ut. Det finns en ignore-word lista och regelverk som man kan koda om på sql-servern men aldrig provat. Det är minst sagt en hel vetenskap.. Du måste söka på inledande text i ett ord, eller ett helt ord. Du kan alltså inte söka på 'b' och få alla ord som innehåller bokstaven b. Jag har läst all hjälpen i sqlen om Contains och det står: Det stämmer bra det hittade filen och den innehöll a-z med mera så det kanske inte är så smart att göra så här? <Därför borde jag kunna skriva "CONTAINS(Ord, 'bo')" Jag har testat det med men det hjälper inte Om du indexerat ProductName i Northwind, och startat population av den, så skall du få ett svar (en rad) på den frågan ("cho*")Rättstavning
Jag vill kunna rättstava ord och siffror men vet inte hur jag skall göra...
Har alla ord som är rätt i en tabell
har testat DIFFERENCE funkar inget bra...
har även testat SOUNDEX funkar inte heller bra får ex upp berg(soundex B620) på sökning på boras(soundex B620)...
Skall funka så här:
söker jag på ex "boras" så skall man få förslaget "borås".
ungefär som Google
Kör SQL 2000 Server och asp.net
om inte går att lösa i sql så kanske man kan lösa det i asp.net?Sv: Rättstavning
I värsta fall skulle det väl gå att bygga en fråga som gör:
where fältet LIKE '_oras' or fältet LIKE 'b_ras' or fältet LIKE 'bo_as' or fältet LIKE 'bor_s' or fältet LIKE 'bora_'Sv:Rättstavning
i detta fall finns ordet
men man kanske skriver boorås och då hittar den inget.Sv: Rättstavning
Mitt tips är följande process:
1. Lägg in alla ord som har samma längd +- 1 tecken i en temporär tabell
2. I denna temporära tabell har du en extra kolumn med hur många bokstäver som överensstämmer som du således räknar ut och lägger in i denna kolumnen, ex. booras matchar borås med 4 tecken medan bärs matchar borås med 3 bokstäver.
3. Sortera ut de ord som ha flest matchande bokstäver och sätt poäng efter hur många bokstäver av de som matchar som ligger i rätt följd. T.ex. booras skulle få 4 poäng eftersom alla fyra matchande bokstäver ligger i rätt ordning, medan sober bara skulle får två poäng eftersom b och r är de enda som fölljer i någorlunda rätt ordning.
4. Lägg nu till ett halv poäng för varje kombination där två bokstäver bytt plats så att de matchar, t.ex. broas liknar boras om man byter plats på r och o så här har man 4 poäng från föregeående steg och ytterligare en halv från detta steg
5 Summera nu poängen och presentera det (eller de) som har högst poäng
Det finns säkert effektivare algoritmer, men jag tror att man komemr en bra bit med denna metod. Sedan kan man ju alltid välja att doktorera på denna typ av matchningar och då tror jag man lyckas ännu bättre... ;-)
Lycka till!
// JohanSv:Rättstavning
Jag försökte skapa det men fick felmedelandet "The selected table has no unique single column index on a column that does not allow NULLS."
och jag har skapat olika index och provat fram och tilbaka men får det inte till att funka.Sv: Rättstavning
Sv:Rättstavning
Tror inte jag kan skapa ett full-text indexering på mitt webhotell men om jag kan hur gör jag för att skapa det?
i annat fall finns det något annat sätt att kolla vilka bokstäver som är rätt?
kan man loppa ut alla tecken i söksträngen och kolla med dem imot ordena på något sätt?Sv: Rättstavning
<code>
USE MyDatabase
EXEC sp_fulltext_database 'enable'
</code>
EDIT: Från hjälpfilen:
Only members of the sysadmin fixed server role and db_owner fixed database role can execute sp_fulltext_database.
Lycka till!
// JohanSv:Rättstavning
så skriver jag
<code>SELECT ord FROM Tabell WHERE CONTAINS(ord, 'b')</code>
men får felmeddelandet:
Execution of a full-text operation failed. A clause of the query contained only ignored words.
Om jag därimot skriver
<code>SELECT ord FROM Tabell WHERE CONTAINS(ord, 'bo')</code>
så får jag inget felmeddelande men inget resultat
vad är fel?
Jag måste ju söka på en bokstav för att kunna få ut om den finns i ordet.
En annan grej hur skall jag kolla vilken bokstavs position som överensstämmer ?Sv: Rättstavning
Sv:Rättstavning
Rådet gäller: läs i hjälpen HUR CONTAINS är tänkt att användas, så får du en del tips.
/mickeSv: Rättstavning
"A. Use CONTAINS with <simple_term>
This example finds all products with a price of $15.00 that contain the word "bottles."
USE Northwind
GO
SELECT ProductName
FROM Products
WHERE UnitPrice = 15.00
AND CONTAINS(QuantityPerUnit, 'bottles')
GO"
Därför borde jag kunna skriva "CONTAINS(Ord, 'bo')" men jag får inga träffar hur långt sökord jag än har.
varför ?Sv:Rättstavning
Sv:Rättstavning
<men jag får inga träffar hur långt sökord jag än har.
<varför ?
För att du då måste söka på 'bo%' eller 'bo*'. Som du skriver, hittas alla förekomster av EXAKT 'bo' och inget annat.
/mickeSv: Rättstavning
<code>C. Use CONTAINS with <prefix_term>
This example returns all product names with at least one word starting with the prefix choc in the ProductName column.
USE Northwind
GO
SELECT ProductName
FROM Products
WHERE CONTAINS(ProductName, ' "choc*" ')
GO</code>
står det i hjälpen
Kan jag har gjort fel på full-text indexeringen eller något annat i databasen ?Sv:Rättstavning
Får du inget svar, så har du inte gjort rätt.
MEN!!! Om du kör XP, så vill inte Fulltextindexeringen vara med. Du måste köra Windows 2000/2003 Server för att det skall funka.
/micke