Intereting Posts
Способ использования Config :: set () дважды в функции как добавить пользовательский javascript в wordpress functions.php Вызов случайных сеансов Codeigniter (уже опробованный переопределить класс сеанса И повышение session_time_to_update Являются ли созданные cookie недоступными до следующей загрузки страницы? Получить почтовый индекс пользователя facebook графическим API facebook Защищенный паролем каталог и файлы в PHP Symfony2 – Выход из системы и очистка кеша + предупреждение cakephp paginate с помощью mysql SQL_CALC_FOUND_ROWS .HTACCESS Unicode Recignisition / Encoding насколько зрелым является HTML + CSS в отношении создания отчетов для печати? Объединение файлов в один PDF-файл с использованием PHP / linux PHP MVC – Как контроллер и просмотр могут обращаться к одному экземпляру модели? jQuery Mobile: как правильно отправить данные формы источник запроса app.request.attributes.get ('_ route') пуст, когда я переопределяю страницу ошибок 404

Как запросить Sphinx для точной совпадающей фразы?

Кажется, что Сфинкс ищет слово словом. Я не знаю, как искать документы для точной фразы. Я попробовал SPH_MATCH_ALL , SPH_MATCH_PHRASE но все разыскивали документы по слову. Я использую его в своем приложении PHP.

Как запросить Sphinx для соответствия точной строке?

Вот мой код:

 $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); 

Результат возврата:

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

Как видите, Sphinx выполняет поиск документов по слову …

Лучший способ – использовать синтаксис SPH_MATCH_EXTENDED2 и взять запрос в двойных кавычках.

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

Расширенный синтаксис

использовать:

 $sphinx->SetMatchMode(SPH_MATCH_PHRASE); 

SPH_MATCH_ALL Сопоставьте все слова запроса (режим по умолчанию).

SPH_MATCH_ANY Сопоставьте любые слова запроса.

SPH_MATCH_PHRASE Сопоставьте запрос как фразу, требующую идеального соответствия.

SPH_MATCH_BOOLEAN Задайте запрос как булево выражение.

SPH_MATCH_EXTENDED Запрос соответствия как выражение во внутреннем языке запросов Sphinx.

SPH_MATCH_FULLSCAN Включает полноэкранный режим.

SPH_MATCH_EXTENDED2 То же, что и SPH_MATCH_EXTENDED плюс рейтинг и поддержка поиска кворума.

В настоящее время я нашел лучший способ сделать это, используя модификаторы ^ $.

Если вы посмотрите здесь: Sphinx Extended Syntax вы можете увидеть, что вы можете сделать матч, похожий на что-то вроде:

 ^Exact String$ 

Это должно помочь решить проблему.

Я знаю, что опаздываю на вечеринку, но что происходит, когда вы ищете из командной строки?

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

-e2 – режим расширенного соответствия 2.

Также не забудьте переиндексировать индексы sphinx:

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

И убедитесь, что searchd запущен.

Я думаю, лучший способ …
1. использование режима расширенного2
а также
2. используя синтаксис таким образом -> (filed-start и filed-end) && double quot;

Например

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

Самое лучшее, что у меня есть, это:

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

В этом случае точное совпадение будет первым.

Я считаю, что вы видите статистику, которая возвращается вместе с результатами поиска. Когда sphinx завершается, он возвращает статистику о том, где были найдены слова, чтобы вы могли при необходимости корректировать ваш поиск. Чтобы проверить, вы должны выполнить поиск, который возвращает результаты. Вы также должны провести тестирование в тестовом индексе, где вы знаете, какие результаты будут получены для любого конкретного поиска.

если вы пробовали все выше и ничего не работали, проверьте эти параметры в файле sphinx.conf, на вашем индексе 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 в ноль

и не забудьте снова переоткрыть!