Avatar billede pv45 Nybegynder
03. november 2007 - 19:14 Der er 1 løsning

Paging og mellemrum i søgestreng

Nedenstående kode for fritekst-søgningen fungerer udmærket ved søgning på enkelte ord, ex. "hvide". Fungerer også ved søgning på flere ord, ex "hvide høns".
Problemet opstår, når der for "hvide høns" er flere hit og der bladres til ex. hit nr. 2. Så fjernes "høns" i søgestrengen og der udføres en søgning på "hvide", hvilket jo ofte giver betydelig flere hits end en søgning på "hvide høns". Hvor der for "hvide høns" oprindelig kun var fire hits opstår der ved bladring til hits nr. 2 nu eksempelvis ti hits (heriblandt de fire hits for "hvide høns").

<%
intPage = Request("page")
If isNumeric(intPage) = False Or intPage < 1 Then
  intPage = 1
End If

soeg = Request.QueryString("soegtekst")

soegestreng="'%"& soeg &"%'"


Set rs = Server.CreateObject("ADODB.Recordset")
strSQL = " SELECT * FROM database WHERE emne LIKE "& soegestreng &" ORDER BY moededato ASC"
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("../db/emner.mdb")
rs.Open strSQL, strDSN, 1
%>


</head><body>


<%
If Not (rs.BOF Or rs.EOF) Then
  rs.PageSize = 1
  rs.AbsolutePage = intPage
  intRecCount = rs.PageSize
  intPageCount = rs.PageCount
  Response.Write "<p><b>Søgeresultat nr. " & intPage & " af " & intPageCount & "</b></p>"
  Response.Write "Søgetekst: &quot"& soeg &"&quot<BR><BR>"
  Do While Not rs.EOF And intRecCount > 0
      Response.Write "<B>Mødedag</B><BR>"& rs("moededato") &"<br>"
    Response.Write "<B>Dagsorden</B><BR>Punkt "& rs("emnenr") &"<br>"
    Response.Write "<B>Emne</B><br>"
   
    Response.Write rs("emne") & "<br>"
    Response.Write "<B>Referat</B><br>"
    Response.Write rs("referat") & "<br>"
           
  intRecCount = intRecCount - 1
  rs.MoveNext
  Loop
End If
rs.Close
Set rs = Nothing
Response.Write "<BR><BR><BR><BR><BR>"
%>
<div id="watermarklogo" style="position:absolute;
                                width: 550px;
                                height: 100px;
                                border-top-style: solid;
                                border-top-width: 2px;
                                border-top-color: #000000;
                                margin-left: 5px;
                                padding-left: 10px;
                                background-color: #E2E8EC;"></div>

<script>
var Hoffset=0
var Voffset=110

var ie=document.all&&navigator.userAgent.indexOf("Opera")==-1

var menu_obj=ie? document.all.watermarklogo : document.getElementById? document.getElementById("watermarklogo") : document.watermarklogo

function insertmenu() {
if (ie||document.getElementById)
menu_obj.innerHTML='<%
If intPageCount <> 0 Then
Response.Write "<p>Se søgeresultat nr. "
For intNum = 1 To intPageCount

  Response.Write "<A HREF=erfa_resultat_lokal.asp?soegtekst="&soeg&"&page=" & intNum & ">" & intNum & "</a> "

Next

Response.Write "<CENTER>"
If Clng(intPage) > 1 Then
  Response.Write "<a href=erfa_resultat_lokal.asp?soegtekst="& soeg &"&page=" & intPage - 1 & ">&lt;&lt;</a>"
Else
  Response.Write "&lt;&lt;"
End If

Response.Write "&nbsp;"

If Clng(intPage) < Clng(intPageCount) Then
  Response.Write "<a href=erfa_resultat_lokal.asp?soegtekst="& soeg &"&page=" & intPage + 1 & ">&gt;&gt;</a> "
Else
  Response.Write "&gt;&gt;"
End If

Response.Write "</CENTER>"
Response.Write "<CENTER><BR><B><A HREF=http://127.0.0.1/index.htm>Retur</B></CENTER>"

Else If intPageCount = 0 Then
        Response.Write "<CENTER><B>Intet resultat for søgning på &quot"& soeg &"&quot.</B><BR></CENTER>"
        Response.Write "<CENTER><B><A HREF=http://127.0.0.1/index.htm>Retur</B><BR><BR><BR><BR></CENTER>"
        End If
End If
%>'
}

function positionmenu() {
var dsocleft=ie? document.body.scrollLeft : pageXOffset
var dsoctop=ie? document.body.scrollTop : pageYOffset
var window_height=ie? document.body.clientHeight : window.innerHeight

if (ie||document.getElementById){
menu_obj.style.left=parseInt(dsocleft)+5+Hoffset
menu_obj.style.top=parseInt(dsoctop)+parseInt(window_height)-Voffset
}
}

function Vismenu () {
watermarkinterval=setInterval("positionmenu()",30)
insertmenu()
}

if (ie||document.getElementById)
window.onload=Vismenu

window.resizeTo(600,700)
window.moveTo(w,h)

</script>
Avatar billede pv45 Nybegynder
04. november 2007 - 12:20 #1
Jeg har selv fundet løsningen ved brug af replace-funktionen. Ved at erstatte mellemrum med asp's kode for mellemrum: %20, fungerer paging til hit nr. 2 korrekt.

soeg2 = Replace(soeg," ","%20")

Tak til jer der evt. har brugt tid på spørgmålet, men jeg lukker.
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
Kurser inden for grundlæggende programmering

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