Autor Thema: Probleme mit FTsearch  (Gelesen 2398 mal)

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Probleme mit FTsearch
« am: 06.12.06 - 18:04:24 »
Hallo zusammen,

also ich habe hier ein Problem. Ich versuche gerade eine Dublettenprüfung zu realisieren, aber im Moment ärgert mich Notes. Ich habe eine NotesDocumentCollection zusammen gestellt in der einfach alle Dokumente enthalten sind.

Dann lasse ich ein FTSearch auf die Collection los. hier ein kurzer Programmschnipsel

Code
If colSearch.Count  <> 0 Then	
			searchField = "company"		
			searchValue =docCol.GetItemValue(searchField)(0)
			Call colSearch.FTSearch(searchValue,0)
		End If 

Im Wert für searchValue ist ein ordentlicher String er findet das passende Dokument auch und schmeisst alle anderen Dokumente aus der Collection raus. Wenn ich aber die Firma doppelt in der DB habe , gibt er mir kein Dokument zurück obwohl die Strings identisch sind, weil ich die Daten einfach kopiert habe.

Desweiteren ist interessant, dass wenn ich (komische Satzkonstruktion) zuerst auf PLZ prüfen lasse

Code
If colSearch.Count <> 0 Then	
			searchField = "zip"		
			searchValue = docCol.GetItemValue(searchField)(0)
			Call colSearch.FTSearch(searchValue,0)
		End If

Er mir die 4 passenden Dokumente liefert.


-------------------------------------------------------------------------------------------------------------------------

Damit wäre das erste Mysterium erklärt und ich hoffe es wird auch verstanden.
Wenn nicht bitte melden

Die zweite Sache ist halt die, dass ich bei dem 2. Durchlauf mit FTSearch immer nichts zurück bekomme obwohl die Daten eindeutig vorhanden sind. Darf man keine 2 Ftsearch hintereinander auf eine Collection durchführen ? in der Hilfe steht es so zumindest nicht drin.

Bitte helft mir ich bin am verzweifeln.

Gruss Robert
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Probleme mit FTsearch
« Antwort #1 am: 06.12.06 - 19:44:35 »
Kann es vielleicht sein, dass dein Volltext nicht aktuell ist?


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Probleme mit FTsearch
« Antwort #2 am: 07.12.06 - 08:32:56 »
Doch ich aktualisiere den index immer wenn der agent läuft
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Probleme mit FTsearch
« Antwort #3 am: 07.12.06 - 08:42:47 »
Was passiert denn, wenn du FTSearch nicht auf eine Collection loslässt sondern auf die Datenbank? Das Ergebnis ist dann ein Collection der gefundenen Dokumente.


Axel



 
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Probleme mit FTsearch
« Antwort #4 am: 07.12.06 - 09:00:22 »
Es geht ja darum die Suche immer wieder zu verfeinern.

Quasi das Sandkastenprinzip. Man siebt so lange bis man die den feinsten Sand hat.

Wenn ich gleich am Anfang alle Daten berücksichtige schreibe ich vllt dennoch häufig doppelte Datensätze in die Datenbank


Ich schreibe euch nochmal den gesamten Code. Vielleicht ist ja doch noch irgendwo der Wurm drin

Code
Dim session As NotesSession				 ' Die Session zum Arbeiten
Dim dbthis As NotesDatabase			 	' Die göffnete DB "preDocHouse"
Dim collection As NotesDocumentCollection	 ' Die NotesDocumentCollection aus dieser DB
Dim docCol As NotesDocument			' Die Dokumente aus der "preDocHouse"-DB
	Dim dbDocHouse As NotesDatabase	   ' Die "DocHouse"-Db
	Dim isOpenFlag As Boolean		' Diese Flag zeigt an ob die DB geöfnet wurde
	Dim i As Integer					' Der Zähler für die For-Schleife
	Dim colSearch As NotesDocumentCollection ' Die NotesDocumentCollection für die Suche in der "DocHouse"DB
	Dim docSearch As NotesDocument		' ein Dokument aus der colSearch
	Dim strFieldname As String		' Feldname aus der DocHouseDB das untersucht werden soll
	Dim strErgebnis As String		' String in dem die Suchergebnisse dargestellt werden
	Dim searchField As String		' Das Feld in dem gesucht werden soll
	Dim searchValue As String	' Der Suchtext für das zuvor deklarierte Feld
	Dim colCount As Integer			' Beinhaltet die Azahl der Dokumente in der colSearch
	
	Set session = New NotesSession					' Eröffnen der Session
	Set dbthis = session.CurrentDatabase			' Initalisieren der aktuell geöffnetten DB
	Set collection = dbthis.UnprocessedDocuments	' Einsammeln der bis jetzt unbearbeiteten Dokumente
	Set dbDocHouse = session.GetDatabase("","DocHouse")	' Initalisieren der DocHouse DB
	
	
	If Not dbthis.IsOpen Then			' Prüfen ob die DB geöffnet wurde 
		Msgbox "Die Datenbank konnte nicht geöffnet werden ! "
	End If
	
	If Not dbDocHouse.IsOpen Then		' Prüfen ob die DocHouse DB geöffnet werden konnte
		Msgbox "Die Datenbank (DocHouse) konnte nicht geöffnet werden ! "
	End If
	
	
	Call dbDocHouse.UpdateFTIndex(True)	' aktualisieren des Indexes
	
	
	Set colSearch = dbDocHouse.AllDocuments		 Aufstellen der Collection in der gesucht werden soll
	Call colSearch.FTSearch("form",0)		' erstes Filtern der Daten
	
	colCount = collection.Count
	
	For i = 1 To colCount
		
		If i = 1 Then
			Set docCol = collection.GetFirstDocument
		Else
			Set docCol = collection.GetNextDocument(docCol)
		End If
		
		If colSearch.Count  <> 0 Then	
			searchField = "company"		
			searchValue =docCol.GetItemValue(searchField)(0)
			Call colSearch.FTSearch(searchValue,0)
		End If 
		
		If colSearch.Count  <> 0 Then	
			searchField = "city"		
			searchValue =docCol.GetItemValue(searchField)(0)
			Call colSearch.FTSearch(searchValue,0)
		End If 
		
		If colSearch.Count <> 0 Then	
			searchField = "street"		
			searchValue = docCol.GetItemValue(searchField)(0)
			Call colSearch.FTSearch(searchValue,0)
		End If
		
		If colSearch.Count  <> 0 Then		
			searchField = "street"		
			searchValue = docCol.GetItemValue(searchField)(0)
			Call colSearch.FTSearch(searchValue,0)
		End If
		
		If colSearch.count =0 Then
			' kein Datensatz in der Form vorhanden			
			Call docCol.ReplaceItemValue("status","1")
			Call docCol.Save(True,False)
		Elseif colSearch.count = 1Then
			' ein Datensatz in der Form vorhanden			
			Call docCol.ReplaceItemValue("status","2")
			Call docCol.Save(True,False)
		Elseif colSearch.count <1 Then
			' mehere Datensätze in der Form vorhanden			
			Call colSearch.StampAll("status","3")
		End If
		
	Next
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: Probleme mit FTsearch
« Antwort #5 am: 07.12.06 - 10:43:58 »
Code
If colSearch.count =0 Then
			' kein Datensatz in der Form vorhanden			
			Call docCol.ReplaceItemValue("status","1")
			Call docCol.Save(True,False)
		Elseif colSearch.count = 1Then
			' ein Datensatz in der Form vorhanden			
			Call docCol.ReplaceItemValue("status","2")
			Call docCol.Save(True,False)
		Elseif colSearch.count <1 Then
			' mehere Datensätze in der Form vorhanden			
			Call colSearch.StampAll("status","3")
		End If
		

Das letzte Elseif solltst Du nochmals überdenken......
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Probleme mit FTsearch
« Antwort #6 am: 07.12.06 - 10:50:15 »
@ umi

Warum ?
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: Probleme mit FTsearch
« Antwort #7 am: 07.12.06 - 10:54:06 »
zuerst machst Du den Vergleich auf =0
Anschliessend auf  = 1
dann auf < 1
bis jetzt hat mir ein FTSearch noch keine negative Anzahl Dokumente zurückgeliefert......
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Probleme mit FTsearch
« Antwort #8 am: 07.12.06 - 11:33:54 »
Ja gut ich gebe zu ,dass das schwierig wird , aber ich bekomme das noch hin ;)

aber ich will wirklich zwischen null und 1 unterscheiden oder halt mehr... ich meine ich bin zwar immer noch frisch in der ganzen Programmierwelt, aber das war schon so gewollt.

Aber warum mir die FT-Search mir jetzt kein Ergebnis liefert kann mir keiner sagen ?

Ich habe nun wirklich auf alles geachtet, ich vergleiche nur Strings mit Strings und nicht mit sonst irgendwas. Aber trotzdem schmeisst er die Suche und kommt zu keinem Ergebnis, kommt die Suche vielleicht damit nicht zurecht, dass zum Beipiel bei den Strassenname einen Text und dann noch ne Nummer habe?

Also für den Programmierer : String + <Space> + Integer  O0
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Probleme mit FTsearch
« Antwort #9 am: 07.12.06 - 14:01:40 »
So habe mich der Sache nochmal selber angenommen und diese verdammte suche neu aufgebaut, wenn jetzt nur noch ein Dokument in der Collection vorhanden ist, wird es in den Einzelzugriff genommen und Feldweise untersucht. Das ganze sieht dann wie folgt aus :

Code
	' 1. Suche
		If colSearch.Count  <> 0 Then	
			
			searchField = docProfile.GetItemValue("firstkey")(0)		
			searchValue =docCol.GetItemValue(searchField)(0)
			Call colSearch.FTSearch(searchValue,0)
			
		End If 
		
		' 2. Suche
		If colSearch.Count  < 1 Then	
			searchField = docProfile.GetItemValue("secondkey")(0)	
			searchValue =docCol.GetItemValue(searchField)(0)
			Call colSearch.FTSearch(searchValue,0)
		Elseif colSearch.Count = 1 Then
			score = 3			
			Set docSearch = colSearch.GetFirstDocument
			
			key = "secondkey"
			If Not docProfile.getitemvalue(key)(0) = "" Then
				searchField = docProfile.getitemvalue(key)(0)
				If docCol.GetItemValue(searchField)(0) = docSearch.GetItemValue(searchField)(0) Then
					score = score + 2
				End If
			End If
			
			key = "thirdkey"
			If Not docProfile.GetItemValue(key)(0) = "" Then	
				searchField = docProfile.GetItemValue(key)(0)
				If docCol.GetItemValue(searchField)(0) = docSearch.GetItemValue(searchField)(0) Then
					score = score + 1.5
				End If
			End If
			
			key = "fourthkey"
			If Not docProfile.GetItemValue(key)(0) = "" Then
				searchField = docProfile.GetItemValue(key)(0)
				If docCol.GetItemValue(searchField)(0) = docSearch.GetItemValue(searchField)(0) Then
					score = score + 1
				End If
			End If
			
			key = "fithtkey"
			If Not docProfile.GetItemValue(key)(0) = "" Then
				searchField = docProfile.GetItemValue(key)(0)
				If docCol.GetItemValue(searchField)(0) = docSearch.GetItemValue(searchField)(0) Then
					score = score + 1
				End If
			End If
			
			key = "sixtkey"
			If Not docProfile.GetItemValue(key)(0) = "" Then	
				searchField = docProfile.GetItemValue(key)(0)
				If docCol.GetItemValue(searchField)(0) = docSearch.GetItemValue(searchField)(0) Then
					score = score + 1
				End If
				
			End If
			runFlag = True
		End If 
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline just.do.it

  • Junior Mitglied
  • **
  • Beiträge: 61
  • Geschlecht: Männlich
Re: Probleme mit FTsearch
« Antwort #10 am: 07.12.06 - 15:04:16 »
Hallo,
ich denke du solltest hier besser:

Elseif colSearch.count >1 Then
         ' mehere Datensätze in der Form vorhanden         
         Call colSearch.StampAll("status","3")
      End If

verwenden. Also "Größer" 1 und nicht "Kleiner" 1, wie du geschrieben hast.  ;D

Gruß
Dirk

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Probleme mit FTsearch
« Antwort #11 am: 08.12.06 - 09:33:33 »
ja ich habe den fehler auch schon gesehen und mich ne stunde in die Ecke gestellt zum schämen  ;D
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz