8 Stimmen

Wie kann ich Sphinx nach einer exakt passenden Phrase abfragen?

Es scheint, dass Sphinx die Dokumente Wort für Wort durchsucht. Ich weiß nicht, wie ich die Dokumente nach einem genauen Ausdruck durchsuchen kann. Ich habe versucht SPH_MATCH_ALL , SPH_MATCH_PHRASE aber alle durchsuchen die Dokumente Wort für Wort. Ich verwende es in meiner PHP-Anwendung.

Wie kann ich Sphinx abfragen, um eine exakte Zeichenfolge zu finden?

Hier ist mein Code:

$sphinx = new SphinxClient();
$mode = SPH_MATCH_PHRASE;
$sphinx->setServer('127.0.0.1', 9312);
$sphinx->setLimits(0,1);
$sphinx->setMaxQueryTime(5000);
$sphinx->setMatchMode($mode);
$sphinx->setFieldWeights(array('name' => 100));
$sphinx->setArrayResult(true);

$result = $sphinx->query('Lorem ipsum dolor sit amet, consectetur adipiscing elit.');
print_r($result);

Das Ergebnis ist das folgende:

Array (
    [error] =>
    [warning] =>
    [status] => 0
    [fields] => Array (
        [0] => name
        [1] => company
        [2] => image
        [3] => price
    )
    [attrs] => Array ()
    [total] => 0
    [total_found] => 0
    [time] => 0.000
    [words] => Array (
        [lorem] => Array (
            [docs] => 0
            [hits] => 0
        )
        [ipsum] => Array (
            [docs] => 0
            [hits] => 0
        )
        [dolor] => Array (
            [docs] => 0
            [hits] => 0
        )
        [sit] => Array (
            [docs] => 0
            [hits] => 0
        )
        [amet] => Array (
            [docs] => 0
            [hits] => 0
        )
        [consectetur] => Array (
            [docs] => 0
            [hits] => 0
        )
        [adipiscing] => Array (
            [docs] => 0
            [hits] => 0
        )
        [elit] => Array (
            [docs] => 0
            [hits] => 0
        )
    )
)

Wie Sie sehen können, durchsucht Sphinx die Dokumente Wort für Wort...

1voto

user1025280 Punkte 11

Die beste Lösung, die ich habe, ist diese:

$searchTemplate = '@(%s) "^%s$" | "^%s" | "%s" | (%s)';
$sqlToSearch .= sprintf($searchTemplate, 
        "part_name", //Index to search in
        trim($stringToSearch),
        trim($stringToSearch),
        trim($stringToSearch),
        trim($stringToSearch));

In diesem Fall wird die exakte Übereinstimmung zuerst gefunden.

0voto

Kibbee Punkte 64039

Ich glaube, was Sie sehen, sind die Statistiken, die zusammen mit den Suchergebnissen zurückgegeben werden. Wenn sphinx fertig ist, gibt es Statistiken darüber zurück, wo die Wörter gefunden wurden, so dass Sie Ihre Suche bei Bedarf anpassen können. Um dies zu überprüfen, sollten Sie eine Suche durchführen, die Ergebnisse liefert. Sie sollten auch einige Tests mit einem Testindex durchführen, bei dem Sie wissen, wie die Ergebnisse für eine bestimmte Suche aussehen werden.

0voto

jacktrade Punkte 2927

Wenn Sie alles oben genannte ausprobiert haben und nichts funktioniert hat, überprüfen Sie diese Parameter in Ihrer sphinx.conf Datei, in Ihrer index conf

index lol
{
   source                  = lol
   path                    = /var/lib/sphinxsearch/data/lol
   morphology              = none

   min_word_len            = 3
   min_prefix_len          = 0
   min_infix_len           = 0

...

min_prefix_len auf Null setzen

und vergessen Sie nicht, wieder neu zu indizieren!!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X