Suchfunktion wahrscheinlich Volltextsuche

Suchfunktion wahrscheinlich Volltextsuche

am 31.03.2005 16:51:42 von fuzzypdm

Hallo,

ich möchte gerne eine stichwortsuche für einen webshop realisieren.
es soll dabei ein suchstring eingegeben werden, dieser wird dann von mir
mittels explode in ein array geschrieben.

wichtig ist dabei das die abfrage über mehrere spalten der tabelle artikel
geht.


meine abfrage sieht so aus:
select * from artikel, kategorie where $newSearch


und $newSearch ergibt sich aus:

for ($i = 0; $i <= $elements; $i++)
{
if($i==0)
{
$newSearch=" match (hersteller, bezeichnung, farbe) against
('*$user_array[$i]*' in boolean mode)";
}
elseif(!(empty($user_array[$i])))
{
$newSearch.=" and match (hersteller, bezeichnung, farbe)
against ('*$user_array[$i]*' in boolean mode)";
}
}

ich bekomme bei der suche auch ergebnisse.

jedoch habe zwei probleme
als beispiel die suche nach "sony mz-nh" liefert mir folgende ergebnisse:
sony mz-rh910
sony mz-rh710
sony mz-nh1
sony mz-nh600

es sollten aber nur diese ergebnisse geliefert werden:
sony mz-nh1
sony mz-nh600.


desweiteren funktionieren die platzhalter vor einen wort nicht.
die suche nach "600" bringt mir keine ergebnisse ogwohl es ja artikel
sony mz-nh600
gibt.

habt ihr irgendwelche ideen?

Re: Suchfunktion wahrscheinlich Volltextsuche

am 01.04.2005 18:35:04 von dev-null-use-reply-adress

Irgendwer oder -was schrieb:

> select * from artikel, kategorie where $newSearch
>
>
> und $newSearch ergibt sich aus:
>
> for ($i = 0; $i <= $elements; $i++)
> {
> if($i==0)
> {
> $newSearch=" match (hersteller, bezeichnung, farbe) against
> ('*$user_array[$i]*' in boolean mode)";
> }
> elseif(!(empty($user_array[$i])))
> {
> $newSearch.=" and match (hersteller, bezeichnung, farbe)
> against ('*$user_array[$i]*' in boolean mode)";
> }
> }

Die Suchausdrücke sollen also praktisch mit UND verküpft sein?
Das ginge viel einfacher. Entweder erklärst Du dem Anwender, daß
standardmäßig mit ODER gesucht wird und sagst ihm, was es für
weitere Optionen gibt ("+linux +mac -windows" z.B.), oder Du setzt
einfach selber vor jeden Suchbegriff ein +. Ich könnte mir nämlich
auch vorstellen, daß ein MATCH ... AGAINST schneller ist, als
viele mit AND verknüpfte.

> ich bekomme bei der suche auch ergebnisse.
>
> jedoch habe zwei probleme
> als beispiel die suche nach "sony mz-nh" liefert mir folgende ergebnisse:
> sony mz-rh910
> sony mz-rh710
> sony mz-nh1
> sony mz-nh600
>
> es sollten aber nur diese ergebnisse geliefert werden:
> sony mz-nh1
> sony mz-nh600.
>
>
> desweiteren funktionieren die platzhalter vor einen wort nicht.
> die suche nach "600" bringt mir keine ergebnisse ogwohl es ja artikel
> sony mz-nh600
> gibt.

Beides scheint mir auch etwas merkwürdig. Aber alles Rätsel raten
bringt nichts, ohne mal ein komplett zusammen gesetztes Statemant zu
sehen. Lasse Dir so eines vom Script ausgeben. Teste es ggf. in
einem anderen MySQL-Client.
Liegt denn auch ein gemeinsamer Volltext-Index über den drei Spalten?

> habt ihr irgendwelche ideen?

Ja, ein paar noch - fast die wichtigsten überhaupt.

1. Dein Problem hat eigentlich sehr wenig mit PHP zu tun, da es
sich scheinbar um ein reines SQL-/MySQL-Problem handelt. Und
da wissen die Leute in news:de.comp.datenbanken.mysql besser
bescheid.
2. Lege Dir dringend einen Namen zu - Pseudonyme im Usenet
zu verwenden, erhöht nicht unbedingt die Antwortwahrscheinlichkeit.
3. Eine Überprüfung Deiner Schifttaste könnte auch nichts schaden.


Gruß, JPM

Re: Suchfunktion wahrscheinlich Volltextsuche

am 04.04.2005 09:29:32 von fuzzypdm

Vielen Dank für die Hilfe,

ich habe jetzt meinen Namen geändert und das Problem auch gelöst,
habe es mit AND und LIKE gelöst.

BP


"Jens Peter Moeller" schrieb im
Newsbeitrag news:424d782f$0$11481$9b4e6d93@newsread2.arcor-online.net...
> Irgendwer oder -was schrieb:
>
>> select * from artikel, kategorie where $newSearch
>>
>>
>> und $newSearch ergibt sich aus:
>>
>> for ($i = 0; $i <= $elements; $i++)
>> {
>> if($i==0)
>> {
>> $newSearch=" match (hersteller, bezeichnung, farbe)
>> against ('*$user_array[$i]*' in boolean mode)";
>> }
>> elseif(!(empty($user_array[$i])))
>> {
>> $newSearch.=" and match (hersteller, bezeichnung, farbe)
>> against ('*$user_array[$i]*' in boolean mode)";
>> }
>> }
>
> Die Suchausdrücke sollen also praktisch mit UND verküpft sein?
> Das ginge viel einfacher. Entweder erklärst Du dem Anwender, daß
> standardmäßig mit ODER gesucht wird und sagst ihm, was es für
> weitere Optionen gibt ("+linux +mac -windows" z.B.), oder Du setzt
> einfach selber vor jeden Suchbegriff ein +. Ich könnte mir nämlich
> auch vorstellen, daß ein MATCH ... AGAINST schneller ist, als
> viele mit AND verknüpfte.
>
>> ich bekomme bei der suche auch ergebnisse.
>>
>> jedoch habe zwei probleme
>> als beispiel die suche nach "sony mz-nh" liefert mir folgende ergebnisse:
>> sony mz-rh910
>> sony mz-rh710
>> sony mz-nh1
>> sony mz-nh600
>>
>> es sollten aber nur diese ergebnisse geliefert werden:
>> sony mz-nh1
>> sony mz-nh600.
>>
>>
>> desweiteren funktionieren die platzhalter vor einen wort nicht.
>> die suche nach "600" bringt mir keine ergebnisse ogwohl es ja artikel
>> sony mz-nh600
>> gibt.
>
> Beides scheint mir auch etwas merkwürdig. Aber alles Rätsel raten
> bringt nichts, ohne mal ein komplett zusammen gesetztes Statemant zu
> sehen. Lasse Dir so eines vom Script ausgeben. Teste es ggf. in
> einem anderen MySQL-Client.
> Liegt denn auch ein gemeinsamer Volltext-Index über den drei Spalten?
>
>> habt ihr irgendwelche ideen?
>
> Ja, ein paar noch - fast die wichtigsten überhaupt.
>
> 1. Dein Problem hat eigentlich sehr wenig mit PHP zu tun, da es
> sich scheinbar um ein reines SQL-/MySQL-Problem handelt. Und
> da wissen die Leute in news:de.comp.datenbanken.mysql besser
> bescheid.
> 2. Lege Dir dringend einen Namen zu - Pseudonyme im Usenet
> zu verwenden, erhöht nicht unbedingt die Antwortwahrscheinlichkeit.
> 3. Eine Überprüfung Deiner Schifttaste könnte auch nichts schaden.
>
>
> Gruß, JPM