Avatar billede mema Nybegynder
28. november 2007 - 21:57 Der er 8 kommentarer og
1 løsning

full-text søgning, der finder bøjninger

Jeg har en sql database og tabel der er indekseret. I min webform bruger følgende:

protected void btnSoeg_Click(object sender, EventArgs e)
{
    int counter = 0;
    SqlDataReader reader;
    SqlConnection conSoeg = new SqlConnection(WebConfigurationManager.ConnectionStrings["myConnection"].ConnectionString);

    try
    {
        SqlCommand mySqlCommand = conSoeg.CreateCommand();

        string containsPart = txtSoeg.Text;
        containsPart = containPart.Replace(" ", " AND ");

        mySqlCommand.CommandText = "SELECT ResultatID, Beskrivelse_spg, Oplysning_sendt FROM Resultat WHERE CONTAINS (Beskrivelse_spg, '  FORMSOF(INFLECTIONAL, " + containsPart + ")');";
        conSoeg.Open();

        reader = mySqlCommand.ExecuteReader();
        while (reader.Read())
        {
            lblSoeg.Text += "ID: " + Convert.ToString(reader["ResultatID"]) + "<br><b>
Spørgsmål:</b><br><i><font color=#666666>" + Convert.ToString(reader["Beskrivelse_spg"]) + "<br></font></i><b>Oplysning sendt:</b><br>" + Convert.ToString(reader["Oplysning_sendt"]) + "<br><br><br>";
            counter++;
        }
        reader.Close();

        conSoeg.Close();
    }
    catch (Exception ex)
    {
        lblFejl.Text = ex.ToString();
    }
    finally
    {
        lblCounter.Text = "Der er fundet <b>" + counter.ToString() + "</b> forekomst af <b>" + txtSoeg.Text + "</b>";
    }
}

Den søger og finder de rækker der matcher, men netop på ordet. For eks. hvis jeg søger efter 'vand', finder det ikke 'vandtæt'. Hvordan kan jeg gøre det.
På tabellen har jeg sat 'full-text type column' til 'None' og Language til 'Neutral'. Jeg kan ikke vælge 'Danish', da det ikke findes. Men hvis jeg sætter Language til English, så finder også 'teeth', hvis der søges efter 'tooth'.
Hvordan kan jeg bringe det at forstå danske bøjninger?
Avatar billede nielle Nybegynder
28. november 2007 - 22:19 #1
Jeg har godt nok ikke selv prøvet det, men det ser ud til at være noget i denne stil du skal have fat på:

http://www.simple-talk.com/sql/learn-sql-server/sql-server-full-text-search-language-features,-part-2/

(begrebet du skal søge på er "stemming")
Avatar billede montago Praktikant
29. november 2007 - 00:01 #2
i MySQL findes også SOUNDS LIKE som virker ok...

måske ikke noget der kan hjælpe med gradbøjninger, men det altid rart at finde noget selvom man ikke kan stave :)
Avatar billede nielle Nybegynder
29. november 2007 - 07:56 #3
"SOUNDS LIKE" findes ikke til MS SQL, men MS SQL har faktisk soundex() funktionen (og SOUNDS LIKE syntaksen fra MySQL er blot et nyttigt alias for denne):

SELECT * FROM dinTabel WHERE SOUNDEX(ditFelt) = SOUNDEX('Dit ord')

Jeg er dog langt fra sikker på at den er super anvendelig til formåelt ... i hvert fald giver mine egne (få) forsøg en hel del ekstra hits på en søgning.
Avatar billede mema Nybegynder
29. november 2007 - 12:11 #4
Tak for svar og link. Jeg har også temmelig mange andre links, men hverken jeg ikke kan implementerer dem rigtig eller min tabel er ikke sat til rigtige sprog?

Hos mig giver desværre oven stående igen resultat:
....
mySqlCommand.CommandText = "SELECT ResultatID, Beskrivelse_spg, Oplysning_sendt FROM Resultat WHERE SOUNDEX(Beskrivelse_spg) = SOUNDEX('containsPart')";
....

Mit problem er i hvert fald, tror jeg, sprøget. Jeg kan vælge full-text column at blive på English, German... men ikke Danish. Tidligere har jeg som skrevet prøvet med engelsk, og det finder 'teeth', når jeg søger efter 'tooth'.
Avatar billede nielle Nybegynder
29. november 2007 - 12:23 #5
Din SQL skal vel være:

mySqlCommand.CommandText = "SELECT ResultatID, Beskrivelse_spg, Oplysning_sendt FROM Resultat WHERE SOUNDEX(Beskrivelse_spg) = SOUNDEX('" + containsPart + "')";

Hvis den skal give mening sammen med din ovenstående kode
Avatar billede mema Nybegynder
30. november 2007 - 15:32 #6
Ja, men nu:
- virker det ikke efter hensigten
- Viser kun et forekomst af (præcis) det ord man har søgt :(
Avatar billede nielle Nybegynder
30. november 2007 - 19:17 #7
Har du afprøvet linket fra 28/11-2007 22:19:09 endnu?
Avatar billede mema Nybegynder
30. november 2007 - 21:11 #8
Jo, og det var et godt websted.
Mit problem er ikke løst med 'danske bøjninger', men jeg tror du tjener point pga. et godt link og andre svar. Send venligst et svar.
Avatar billede nielle Nybegynder
01. december 2007 - 07:17 #9
Svar :^)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester