[asp]indexserver via sql

Pagina: 1
Acties:

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:22
hoi,

met onderstaand script:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%
Dim objConn, objRS, sqlString, strDocTitle, strQuery
strQuery = request.form("zoekwoord")

sqlString = "SELECT DocTitle FROM intranet WHERE LIKE '%"&strQuery&"%'"
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "provider=MSIDXS"

Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open sqlString, objConn

Do while not objRS.EOF
    strDocTitle = objRS("Doctitle")
    Response.write(strDocTitle)
Loop
%>

krijg ik als resultaat:
code:
1
2
3
4
5
Microsoft OLE DB Provider for Indexing Service error '80040e14' 

View 'INTRANET' has not been defined in catalog 'Web'. SQLSTATE=42S02 

/zoeken/zoekresultaat.asp, line 11

Terwijl de "intranet" een aparte catalog in indexserver betreft. Hoe dit script in godsnaam erbij komt dat ie de catalog Web moet pakken (lijkt me iets van een standaard oid) en als view een intranet :?

Probeer ik hetzelfde met een andere code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Set oQuery = Server.CreateObject("ixsso.Query")
oQuery.Query=sKeywords
oQuery.SortBy = "rank[d]"
oQuery.Catalog="intranet"
oQuery.Columns="DocTitle,vpath, filename"
oQuery.MaxRecords=300
Set rsResult=oQuery.CreateRecordset("sequential")
bNoISRecords=false
if IsNull(rsResult) OR IsEmpty(rsResult) then
    ' do nothing
    bNoISRecords=true
else
    if NOT (rsResult.EOF OR rsResult.BOF) then
        bPagesFound=true
        bNoISRecords=false
    end if
end if

'...

' walk through the results
if NOT bNoISRecords then
    do while not rsResult.EOF
        if NOT bHeaderPrinted then
            bHeaderPrinted=true
        %>
            De zoektermen komen voor op de volgende pagina's. Klikt u op de naam van de pagina
            om direct naar die pagina te gaan.<br><br>                      
        <%
        end if
        if VarType(rsResult("DocTitle")) = 1 or len(rsResult("DocTitle"))<=0 then
            ' do nothing.
        else
        %>
            <a href="<%=rsResult("vpath")%>"><%= Server.HTMLEncode(rsResult("DocTitle"))%></a><BR>
        <%
        end if
        rsResult.movenext
    loop
end if
set rsResult=nothing
set oQuery=nothing

De 2e lap code werkt wel, alleen ik vind het makkelijker om het via een simpele SQL query te doen.

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

Kijk ff op msdn, het is namelijk een hoop uitleg, je moet namelijk apart connectie gebruiken voor elke catalog. Verder moet je ook scopes gebruiken als je het op jouw manier wil doen. succes

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:22
met een scope bedoel je:
SELECT DocTitle FROM SCOPE ('c:\wwwroot\intranet\') WHERE etc. etc.?

Verder zal ik nog maar eens op msdn gluren (had daar namelijk al gekeken, maar kon niks vinden!)

Maar die onderste code werkt wel om gewoon de catalog op te pikken.

Nahjah,
als ik wat heb, en het werkt post ik het hier wel (dramatisch laag aantal topics over indexserver hier ;))

/edit:
ik heb nu:
sqlString = "SELECT Doctitle SCOPE(intranet) WHERE LIKE "

Die werkt niet,dan krijg ik weer zo'n VIEW melding.

pak ik:
sqlString = "SELECT Doctitle SCOPE() WHERE LIKE "
Die werkt wel, want daar pakt ie de standaard Web Catalog, en dat is niet de bedoeling!

Vervelend :(

Heart..pumps blood.Has nothing to do with emotion! Bored


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:22
heb um nu werkend (alleen niet via de intranet catalog, maar ik heb de web catalog aangepast:)
code:
1
2
strSQL = "SELECT Filename, size, Doctitle, rank, characterization, write, vpath from SCOPE() "
strSQL = strSQL & " WHERE (characterization LIKE '%" & zoekwoord & "%') OR (doctitle LIKE '%" & zoekwoord & "%') "

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

Dat is beter, je moet denk ik toch een aparte connectie aanmaken per catalog. Teminste zo doe ik dat, je zou daar ff naar kunnen kijken, maar een voor een tijdelijke oplossing is dit wel goed.