Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Ralph am 07.11.02 - 15:30:15
-
das man mit FTSearch ganze DB's durchsuchen kann weiß ich, aber wie kann mann die Suche nur auf das aktuelle Document begrenzen.
zur Erläuterung: bei der datenübernahme aus einer DB soll jedes Document auf bestimmte Schlüsselworte geprüft werden, wenn diese nicht vorhanden sind soll das Doc gespeichert werden.
es nützt nichts wenn die ganze QuellDB durchsucht wird, mann würde immer etwas finden.
Hier mein Skript
keySearch = | Select Form = "KM" |
Set cdocKey = dbkey.Search(keySearch,dateTime,0) '# alle Documente aus KeyAnsicht
Set docKey2 = cdocKey.GetFirstDocument
For j =1 To cdockey.count
Set docKey = cdocKey.GetDocument(docKey2) '# erste Dokument aus KeyAnsicht
Set csearch = dbNab.FTSearch(dockey.keywordMaske(0),0)
Set dockey2 =cdocKey.GetNextDocument(dockey2)
Next
-
Du suchst ja einen Wert, der in einem Feld sein muss. Deshalb musst Du das Feld / die Felder aufrufen und bzw. deren Inhalt auslesen und mit dem Vorgabewert vergleichen.
FTSearch ist nun mal nur für die DB.
Dazu könntest Du z.B. InStr verwenden (gibt die Position des gesuchten Wertes) oder StrCompare.
-
.FTSearch-Methode ist auch für NotesDocumentCollection verfügbar!
-
... warum eigentlich db.FTSearch(...) ? - Dazu braucht man ja einen Volltextindex der DB...
... es würde schon genügen einen DB.Search(...) zu verwenden und in der Suchformel @Contains oder derartiges zu verwenden...
ata
-
Und überhaupt mal eine dumme Frage:
Wieso führst Du nicht Dein db.FTSearch durch und 'subtrahierst das Ergebnis von db.AllDocuments?
Da müßte dann doch die collection übrigbleiben, die Du speichern willst?
-
Danke für die Hinweise ich werde s morgen nochmal probieren, auf den Gedanken die einzelnen Feldwerte der Collektion zu vergleichen bin ich auch gekommen. Habs aber noch nicht probiert.
Ich dachte es gibt vielleicht FTSearch auch für Doc's.
In der Hilfe hab ich auch sowas gelesen,das war FTSearchScore bin
ich aber nicht mit klar gekommen.
Als Rückgabewert soll ein Integer der gefundenen Übereinstimmungen im Document kommen, aber wie das so ist er kam nicht.
Also bis morgen ich halt euch auf dem laufenden
Gruß Ralph
-
Hi,
Ich hab es jetzt so gelöst, mit strCompare
Ist zwar nicht so das was ich mir vorgestellt hatte. Eigentlich wollte ich alle Felder des Documents auslesen lassen und dann über eine Schleife nacheinander Vergleichen (wäre dann im Prinzip auch eine Volltextsuche), aber ich habe nicht herrausgefunden wie ich an die Felder rankomme
'# Vergleich der Felder ob Schlüssel worte enthalten
Dim docKey As Notesdocument
Dim docKey2 As Notesdocument
Dim dbkey As Notesdatabase
Set dbkey = session.GetDatabase("pcoi4","apptelephone.nsf")
Dim cdocKey As NotesdocumentCollection
Dim vergleich As Integer
'# Einlesen der Schlüsselworte in eine Collection
vergleich = 1
keySearch = | Select Form = "KM" |
Set cdocKey = dbkey.Search(keySearch,dateTime,0) '# alle Documente aus KeyAnsicht
Set docKey2 = cdocKey.GetFirstDocument
Do While Not docKey2 Is Nothing And vergleich <> 0
Set docKey = cdocKey.GetDocument(docKey2) '# erste Dokument aus KeyAnsicht
If Strcompare( docNab.FirstName(0) , dockey.KeywordMaske(0) ,1) <> 0_
And Strcompare( docNab.LastName(0) , dockey.KeywordMaske(0) ,1) <> 0 Then
vergleich =1
Else
vergleich =0
End If
Set dockey2 =cdocKey.GetNextDocument(dockey2)
Loop
If vergleich <> 0 Then
Set docNew = dbExport.CreateDocumen
-
... sollte es nur ein Auszug aus dem Code sein, oder fehlt da noch Code?
ata
-
Hallo Ralph,
... ich gehe mal auf die Suche, ich hatte sowas schon mal zusammengepfriemelt...
ata