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...

5voto

Iaroslav Vorozhko Punkte 1719

Am besten verwenden Sie die SPH_MATCH_EXTENDED2-Syntax und setzen Ihre Abfrage in Anführungszeichen.

$sphinx->SetMatchMode(SPH_MATCH_EXTENDED2);
$sphinx->Query('"Lorem ipsum dolor"'); 

Erweiterte Syntax

3voto

Faraona Punkte 1665

Verwenden:

$sphinx->SetMatchMode(SPH_MATCH_PHRASE);

SPH_MATCH_ALL Alle Abfragewörter abgleichen (Standardmodus).

SPH_MATCH_ANY Entspricht einem beliebigen Wort der Abfrage.

SPH_MATCH_PHRASE Abfrage als Phrase abgleichen, perfekte Übereinstimmung erforderlich.

SPH_MATCH_BOOLEAN Abfrage als boolescher Ausdruck abgleichen.

SPH_MATCH_EXTENDED Match-Abfrage als Ausdruck in der Sphinx-internen Abfragesprache.

SPH_MATCH_FULLSCAN Aktiviert Fullscan.

SPH_MATCH_EXTENDED2 Dasselbe wie SPH_MATCH_EXTENDED plus Unterstützung für Rangfolge und Quorumssuche.

2voto

Petrogad Punkte 4387

Ich habe herausgefunden, dass es am besten ist, die ^$-Modifikatoren zu verwenden.

Wenn Sie hier schauen: Erweiterte Sphinx-Syntax können Sie sehen, dass Sie einen Abgleich ähnlich wie in diesem Fall durchführen können:

^Exact String$

Damit sollte das Problem behoben sein.

1voto

kakubei Punkte 5191

Ich weiß, ich bin zu spät dran, aber was passiert, wenn man von der Kommandozeile aus sucht?

sphinx/bin/search -i indexName Lorem ipsum -e2

das -e2 ist der erweiterte Match-2-Modus.

Vergessen Sie auch nicht, die Sphinx-Indizes neu zu indizieren:

sphinx/bin/indexer --rotate --config sphinx/etc/sphinx.conf --all

Und stellen Sie sicher, dass searchd läuft.

1voto

user2219620 Punkte 11

Ich denke, der beste Weg...
1. Verwendung des erweiterten2 Modus
et
2. mit dieser Syntax -> (Anfang und Ende der Ablage) && double quot

Zum Beispiel

$sphinx->SetMatchMode(SPH_MATCH_EXTENDED2);
$sphinx->Query('(^Lorem ipsum dolor$ "Lorem ipsum dolor")');

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