Toon posts:

Zoeken op HELE WOORDEN mbv. ASP

Pagina: 1
Acties:
  • 107 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hoi,

Ben op dit moment bezig met het bouwen van een uitgebreide zoekmachine in ASP. Hij werkt al erg goed, maar nu heb ik een probleem.. Als men bijvoorbeeld: "huis" (zonder quotes) intikt, dan vindt ie ook dingen zoals: "woonhuis", terwijl de klant graag wil (vraag me niet waarom!!) dat ie dan ook echt alleen het woord: "huis" vindt.

Ik zal jullie de hele whereclause besparen, omdat 't nogal een flink uitgebreid stuk is, maar hier is het gedeelte waar 't om gaat:

-----------------------------------------------------------
whereclause = whereclause & veld & " like " & "'%" & term & "%'"
-----------------------------------------------------------

Nou zou je zeggen, haal gewoon die "%"-tjes weg en dan vindt ie gewoon alleen het hele woord wel.. maar dit werkt helaas niet (waarschijnlijk omdat het op een Sequel Server database draait??). Als je de whereclause verandert in:

-----------------------------------------------------------
whereclause = whereclause & veld & " like " & "'% " & term & " %'"
-----------------------------------------------------------

(dus met spaties voor en achter de "%"-tjes) dan vindt ie wel het losse woord huis, maar alleen als er een spatie voor en achter staat (en dus niet als er bijvoorbeeld een komma voor staat, of als het woord zich aan het begin van de text bevindt..)

Al met al een heel verhaal dus, en ik heb er ook al redelijk goed overna gedacht, maar kom er even niet uit.. Heb gehoord dat 't misschien op te lossen is met reguliere expressies, maar daar heb ik nog geen ervaring mee!

Kortom: iemand een idee?

p.s. Heb de meeste asp-sites er ook al op nageslagen, zonder suc6.. :(

  • Ashbjorn
  • Registratie: Maart 2001
  • Laatst online: 07-04-2019

Ashbjorn

Who's your daddy! WHUZAAA

Jah Pheezy ik ben nog steeds van mening dat je met RegExp de boel kunt oplossen omdat je dan kunt zeggen:

Zoekopdracht moet voldoen aan:

1 char voor en 1 char na het zoekwoord waarbij dat char moet voldoen aan: spatie, komma, etc

Zoek gewoon ff op RegExp + ASP in google en voila :)

Atl.

Athlon 64 3500+ || MSI Neo2 Platinum || 1GB PC3200 Corsair XLPRO 2-2-2-5@1T || Hitachi SATA 250GB@7200 8MB || WD Raptor 73GB@10000 8MB || AOpen GF 6800 GT 256MB || SB Audigy2 Platinum || Logitech Laser G5 || 19" Iiyama HM903DT || 1280@100Hz


Verwijderd

Als je toch een SQL Server database hebt moet je misschien eens kijken naar Full-Text indexing opties, als je op tekst zoekt is dat eigenlijk de way to go en niet al die lelijke trage LIKE shit..

En je klant is gek ;)

  • Banpei
  • Registratie: Juli 2001
  • Laatst online: 16-09 08:48
Optie om er een vinkje bij te zetten of ie op geheel woord of like wil zoeken?? Lijkt mij iets vriendelijker dan alleen gehele woorden... ;)

Verwijderd

Topicstarter
Ja dat is zo.. maar ze hebben ook al een "niet uitgebreide" zoekfunctie, zegmaar gewoon een klein boxje bovenin de pagina en die zoekt dus al op alles. Daarom willen ze nu ook een uitgebreide zoekfunctie om op hele woorden te kunnen zoeken (met allemaal extra opties, zoals zoeken op publicatiedatum, auteur etc..)

  • Scorpion
  • Registratie: April 2000
  • Laatst online: 18-01-2024

Scorpion

not to lame to read BitchX.doc

ASP is geen programmeer taal, dit hoort in webscripting

:) en phazer, niet afkaffen, dit is de harde waarheid, check de rules maar van dit forum :) :)

  • Mart!
  • Registratie: Februari 2000
  • Laatst online: 14:40
RegExps lijkt me niet zo'n goed idee. Dan moet je dus eerst alle info uit de db halen voordat je de reguliere expressie er overheen kan halen (stel je hebt 1000en records waar hele pagina's tekst in staan = niet leuk). Indexing server is inderdaad de oplossing, maar vereist wel de nodige configuratie. Als je dat niet wilt, probeer het dan met een combinatie. 'huis%' '%huis' '% huis %' '% huis.%' '%,huis %' etc...
Suckt wel een beetje, maar IS een oplossing....

Verwijderd

Topicstarter
Dat werkt dus helaas ook niet :( Want zo kan je alsnog niet de woorden vinden die aan het begin van een zin staan (staan namelijk geen spaties ofzo voor..). Bovendien wordt ie er ENORM traag voor (+- 2min zoeken door 500 records ofzo)

oow en scorp: je hebt gelijk.. zal volgende keer ff beter kijken..

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 07-07 11:51
Wellicht is een 'eigen' indexing een oplossing? Het lijkt misschien omslachtig, maar ik heb het zelf een keer gebouwd en de performance is prima. Het werkt als volgt:

Stel je hebt een tabel met een primaire sleutel en een omschrijving:
1 "woonhuis aan het water"
2 "boerderij met weiland"

Dan maak je een tabel 'woorden', die verwijzen naar de primaire sleutel van de eerste tabel:
woonhuis 1
aan 1
het 1
water 1
boerderij 2
met 2
weiland 2

Als je vervolgens een zoekquery uit wilt halen en op hele woorden te zoeken, selecteer je gewoon op basis van criteria uit de tweede tabel. Eventueel kan je hiermee dus ook op delen van woorden zoeken.

En ja, je moet bij het updaten van een record in de eerste tabel natuurlijk wat aanpassen in de tweede tabel, maar daar maak je dan een mooie functie voor.

Als je eerste tabel groot wordt of veel woorden per record bevat, is dit een waanzinnig snelle oplossing.

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


Verwijderd

Ik ben weer es een roepende in de woestijn geloofik..

Zet fulltext indexing aan op die tabel, dan kan je CONTAINS bebruiken:

WHERE CONTAINS(veld,'woordje')

Ik heb het ff niet getest maar voor zover ik kan zien komt je dan precies op wat jij wil..



CONTAINS
Is a predicate used to search columns containing character-based data types for precise or fuzzy (less precise) matches to single words and phrases, the proximity of words within a certain distance of one another, or weighted matches. CONTAINS can search for:

- A word or phrase.
- The prefix of a word or phrase.
- A word near another word.
- A word inflectionally generated from another (for example, the word drive is the inflectional stem of drives, drove, driving, and driven).
- A word that has a higher designated weighting than another word.

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 07-07 11:51
Hmmm, dat CONTAINS spaart een hoop werk. Vraag ik me alleen af of je de mate van fuzzyness nog kan instellen? Als ik zoek op 'drive' wil ik misschien helemaal niet 'drove' vinden.

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


Verwijderd

Probeer het uit :)

Verwijderd

Topicstarter
Bedankt voor de tip! Ga 't meteen proberen!

Verwijderd

Topicstarter
The selected table has no unique single column index on a column that does not allow NULLS.

Database: avm2

Table: [dbo].[Webpage]

:( en nu ??

>> sorry.. te vroeg gevraagd.. bleek om de primary key te gaan..
Pagina: 1