Как вернуть определенное поле из результатов Sphinx?

StackOverflow https://stackoverflow.com/questions/853842

  •  21-08-2019
  •  | 
  •  

Вопрос

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

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

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

[Обновление] Сегодня нашел это: http://www.sphinxsearch.com/faq.html#row-storage

Это было полезно?

Решение

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

И если подробнее...Сфинкс обычно загружается все значения атрибутов в память, и, вероятно, поэтому их можно возвращать для каждого результата.Возможно, поля хранятся в необратимой кодировке и поэтому не могут быть переведены обратно в нормальные значения?Однако это удар в темноту.

Другие советы

Есть какая-то хитрость.Как я отвечаю до, вы можете добавить столбцы, которые хотите получить, в атрибут записей, то вы можете просто выбрать значение из результата sphinx.

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

Если у вас небольшой объем данных в текстовых полях, вы можете использовать строковые атрибуты Sphinx.

sql_attr_string

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

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

Так что хранить в них много данных было бы не очень хорошей идеей, ведь все атрибуты хранятся в оперативной памяти.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top