2009-05-12 2 views
2

Предположим, я индексирую таблицу книг. У них есть название, автор, описание и т. Д.Как вы возвращаете определенное поле из результатов Sphinx?

Я хочу выполнить поиск по всем полям и вернуть название книг, содержащих мой поисковый запрос. Я могу выполнить поиск и вернуть book_id (doc_id) из Sphinx, чтобы я мог просматривать их самостоятельно, но что было бы действительно потрясающе, если Sphinx просто дал мне названия, поэтому мне вообще не нужно ударять по базе данных. Я могу заставить Сфинкса вернуть мне разные атрибуты, но получение текстового поля ускользает от меня.

Возможно ли это? Если так, то как ты это делаешь?

[Update] Нашел сегодня: http://www.sphinxsearch.com/faq.html#row-storage

ответ

0

Hate убить идею так быстро, но это не представляется возможным. Sphinx не возвращает никакой информации о значениях полей и даже о том, какие поля предоставили соответствие запросу.

И разработать немного больше ... Sphinx обычно загружает все значения в память, что, вероятно, почему это нормально, возвращая их для каждого результата. Может быть, поля хранятся в необратимом кодировании и поэтому не могут быть возвращены к нормальным значениям? Тем не менее, это удар в темноте.

0

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

3

Там какой-то трюк. Когда я отвечу before, вы можете добавить этот столбец, который вы хотите получить в записи attr, тогда вы можете просто выбрать значение из результата из сфинкса.

Пусть это будет полезно для вас: D

1

В случае, если у вас есть небольшое количество данных в текстовых полях, то вы можете использовать строковые атрибуты Сфинкса.

sql_attr_string 

Но, есть некоторые ограничения, как:

строковые атрибуты могут хранить произвольные строки, присоединенные к каждому документа. Ограничение фиксированного размера составляет 4 МБ на каждое значение. Кроме того, searchd будет кэшировать все значения в ОЗУ, что является дополнительным неявным пределом.

Таким образом, было бы неплохо хранить в них много данных, поскольку все атрибуты хранятся в ОЗУ.

 Смежные вопросы

  • Нет связанных вопросов^_^