Sphinx Search Multiply Indexes & Sources - PullRequest
       5

Sphinx Search Multiply Indexes & Sources

0 голосов
/ 18 сентября 2011

Я создаю динамическую CMS, поэтому каждый экземпляр CMS будет иметь свои таблицы в одной БД MYSQL. Пока все работает.

Среда:

  • 8 разных сайтов с разным содержанием. они разделяют только имя БД, но у всех разные таблицы ($ sitename_posts)

  • поиск enigne Сфинкс

Теперь я застрял в этом: когда, например, пользователь выполняет поиск по сайту 1, я хочу найти все таблицы $ sitename_posts и вернуть лучшие результаты.

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

$sphinx = new SphinxClient;
$sphinx->setServer($sphinx_host, $sphinx_port);
$sphinx->setMatchMode(SPH_MATCH_ANY);
$sphinx->setMaxQueryTime(10000);
$sphinx->SetSortMode(SPH_SORT_EXTENDED, '@relevance DESC');
$sphinx->SetLimits(0, 100, 300);
$result = $sphinx->query("Hello World", (index1 index2);

Я не получил результатов. Но если я строю только один индекс и умножаю источники, я получаю результаты, но я не могу определить, из какого источника я получаю данные, поэтому я не могу судить, к какому сайту относится контент.

Еще один вопрос: когда я ищу в индексах, возможно ли, что sphinx возвращает идентификатор и какому индексу этот идентификатор принадлежит? Потому что мне нужно определить, какой индекс принадлежит какому результату.

Спасибо за помощь!

1 Ответ

1 голос
/ 18 сентября 2011

Если я правильно понимаю вопрос, то стоит изучить следующие функции Sphinx:

Распределенные индексы - это позволит вам иметь один индекс на сайт, а также иметь "виртуальный распределенный индекс, который вы можете искать в приложении, когда хотите получить данные.

Слияние индексов - это более постоянный параметр, чем параметр распределенного индекса, но индексатор может объединять несколькоиндексы в единый индекс.Я обычно предпочитаю использовать распределенные индексы.

Атрибуты - Это позволит вам включить постоянное значение в каждый из индексов (например, siteId), которое позволит вам определить, какиеиз индексов, с которых пришел результат поиска.Это также может позволить вам фильтровать результаты при поиске по одному распределенному индексу.

Документы Sphinx - http://sphinxsearch.com/docs/2.0.1/

Объясненные распределенные индексы - http://sphinxsearch.com/docs/2.0.1/distributed.html

Настройка распределенных индексов- http://sphinxsearch.com/docs/2.0.1/confgroup-index.html

...