Сфинкс - Множественный полнотекстовый поиск уменьшает точный счет совпадения - PullRequest
0 голосов
/ 27 декабря 2018

Я столкнулся со странной weight проблемой со Сфинксом.При выполнении полного текста только на name результаты взвешиваются точно.Но когда он расширен с поиском по address, вычисленный вес неверен.

Я использую Sphinx 2.2.11

Пример 1: Поиск по имени дает правильное значениерезультаты

$cl->SetRankingMode(SPH_RANK_SPH04);
$cl->SetSortMode(SPH_SORT_EXTENDED, '@weight desc');
$cl->SetMatchMode(SPH_MATCH_EXTENDED2);
$res = $cl->Query('@name ("la" | "comedie" | "saint" | "michel")', 'idx_name');

Вывод

      Venue Name                               Address          Weight
La Comédie Saint-Michel                 boulevard Saint-Michel  19620
La Comédie Saint-Michel - Small Hall    boulevard Saint-Michel  18649
La Comédie Saint-Michel - Grande Salle  boulevard Saint-Michel  18649

Соответствующие слова

[words] => Array
    (
        [la] => Array
            (
                [docs] => 26110
                [hits] => 29358
            )

        [comedie] => Array
            (
                [docs] => 89
                [hits] => 96
            )

        [saint] => Array
            (
                [docs] => 8820
                [hits] => 10171
            )

        [michel] => Array
            (
                [docs] => 314
                [hits] => 353
            )
    )

Пример 2: Поиск по имени и адресу получает неправильный вес

$cl->SetRankingMode(SPH_RANK_SPH04);
$cl->SetSortMode(SPH_SORT_EXTENDED, '@weight desc');
$cl->SetMatchMode(SPH_MATCH_EXTENDED2);
$res = $cl->Query('@name ("la" | "comedie" | "saint" | "michel")
                   @address ("boulevard" | "saint" | "michel")', 'idx_name');

Вывод

      Venue Name                               Address          Weight    
La Comédie Saint-Michel - Small Hall    boulevard Saint-Michel  32631
La Comédie Saint-Michel - Grande Salle  boulevard Saint-Michel  32631
La Comédie Saint-Michel                 boulevard Saint-Michel  32608

Слова для соответствия

[words] => Array
    (
        [la] => Array
            (
                [docs] => 26110
                [hits] => 29358
            )

        [comedie] => Array
            (
                [docs] => 89
                [hits] => 96
            )

        [saint] => Array
            (
                [docs] => 8820
                [hits] => 10171
            )

        [michel] => Array
            (
                [docs] => 314
                [hits] => 353
            )

        [boulevard] => Array
            (
                [docs] => 19735
                [hits] => 19915
            )
    )

В примере 2 третья запись должна была иметь самый большой вес.Ожидаемый результат - лучшее / точное совпадение, чтобы быть на вершине.Я пытался использовать разные режимы ранжирования, но безуспешно.

...