webForumDet fria alternativet

Fritext sökning samt antal förekomster.

ASP

7 svar · 333 visningar · startad av Cantona

Medlem sedan juni 200161 inlägg
Frågan#1

Skulle behöve lite tankehjälp med följande:

Det gäller en sökfunktion. Jag har en tabell med en kolumn som jag vill söka i, man skall kunna använda sig av fritextsökning.

T.ex söksträngen "Jag heter lars" skall lista träffar med antal träffar.
Finns "lars" med två gånger och "heter" åtta gånger i kolumen så skall det skrivas ut at "Lars" finns 2 gånger och "heter" 8 gånger.

Hur får man ut ett ords antal förekomster i en sträng?

Medlem sedan dec. 200012 464 inlägg
#2

Vilken DBMS?

Medlem sedan jan. 20032 285 inlägg
#3

Skriver lite kod då. Det finns säkert ett smidigare sätt, men detta är det smartaste min hjärna kan komma på. :)

arrSok = Split(Request.Form("sok"))
arrStrang = Split(objRS("kolumn"))

For i = 0 To UBound(arrSok)
  For j = 0 To UBound(arrStrang)
    If arrSok(i) = arrStrang(j) Then intCount = intCount + 1
  Next
  strResultat = strResultat & arrSok(i) & " fanns " & intCount & " gånger.<br>"
  intCount = 0
Next

Response.Write(strResultat)

Otestat. Stor chans att det inte funkar.

Medlem sedan juni 200161 inlägg
#4

MSSQL

Medlem sedan jan. 20032 285 inlägg
#5

Har du testat min kod? Om den inte funkar kan du väl säga vad som är problem, om inte det blir helfel såklart. :)

Medlem sedan juni 200161 inlägg
#6

sorry sebbe har varit ute och farit...

testade din kod och den fungerar men jag skulle vilja ha ut ordens förekomst i procent.

söker jag på tre ord och tex ett av ordet finns så vill jag då ha utrkrivet 33 %. Självklart sorterat med flest ord först.
Har varit på 2 st 30-års skivor så jag är lite mossig i hatten...

Här kommer min kod.

    e=1
    strString = "Detta är en sökning"
    ArrayTemp = split(strString, " ")
    NumberOfWords = UBound(ArrayTemp) + 1
    
    e=1
    For Each Word In ArrayTemp
		strresult = strresult &  "'%'+'"& Word &"' + '%'+"
	e=e+1
    next

	RS = "SELECT BODY FROM tblContent WHERE BODY LIKE " & left(strresult,len(strresult) -1)
	Set RS1 = DbConn.Execute(RS)
	
		While Not RS1.EOF

			Response.write RS1("BODY") & "<br>"

		RS1.MoveNext
	    Wend
	    RS1.CLOSE
	    Set RS1 = Nothing
Medlem sedan jan. 20032 285 inlägg
#7

Såhär då? (Fortsätter på min kod)

<%
arrSok = Split(Request.Form("sok"))
arrStrang = Split(objRS("kolumn"))

For i = 0 To UBound(arrSok)
  For j = 0 To UBound(arrStrang)
    If arrSok(i) = arrStrang(j) Then intCount = intCount + 1
  Next
  strResultat = strResultat & arrSok(i) & " fanns " & Round(intCount/(UBound(arrSok)+1)*100) & "% av gångerna.<br>"
  intCount = 0
Next

Response.Write(strResultat)
%>

/red Märkte att det blev helt fel. Tar inte bort koden ifall att någon ändå vill ha den. :)

Medlem sedan dec. 20003 887 inlägg
#8
Dim astrSearch(), astrWords(), aintHits()

astrSearch = Split(Request.Form("sok"))
astrWords = Split(objRS("kolumn"))

For i = 0 To Ubound(astrSearch) - 1
  aintHits(i) = 0

  For j = 0 To Ubound(astrWords) - 1
    If astrSearch(i) = astrWords(j) Then aintHits(i) = aintHits(i) + 1
  Next j
Next i

For i =  0 To Ubound(astrSearch) - 2
  For j = 1 To Ubound(astrSearch) - 1
    If aintHits(j) > aintHits(i) Then
      intTemp = aintCount(i)
      aintCount(i) = aintCount(j)
      aintCount(j) = intTemp

      strTemp = astrSearch(i)
      strSearch(i) = strSearch(j)
      strSearch(j) = strTemp
  Next j
Next i

intWords = Ubound(astrWords)

For i = 0 To Ubound(astrSearch) - 1
  Response.Write FormatPercent(CDbl(aintCount(i)) / CDbl(intWords), 2, True) & " : " & astrSearch(i) & "<br>"
Next i

Vete tusan om den där sorteringen fungerar speciellt bra, men det är ju bara att testa och se vad som spottas ut ;)

259 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)