Есть ли способ запросить Sphinx для записей, которые имеют определенное поле, которое не является пустым? - PullRequest
4 голосов
/ 17 ноября 2010

Я использую режим соответствия SPH_MATCH_EXTENDED2 со Sphinx 0.9.9, и я хочу написать поисковый запрос, который находит все записи, которые имеют что-либо в определенном поле. Я пробовал следующее безуспешно:

@MyField *
@MyField !""

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

Есть мысли?

Ответы [ 3 ]

2 голосов
/ 01 августа 2011

Легко, просто добавьте константу в ваш sql_query в конфигурации sphinx:

sql_query = SELECT `id`, `title`, 1 as `all` FROM table 

тогда вы можете использовать просто запрос в расширенном режиме запроса:

@all "1"

и все работает

1 голос
/ 23 ноября 2010

Вы можете сделать это без обновления / изменения базы данных - просто изменив sql_query, из которого построен ваш индекс / источник. например,

 sql_query = SELECT id, \
               IF(title!='',title,'this_field_is_actually_blank') \
             FROM table 

Затем, убрав комментарий предыдущего автора, просто используйте отрицание в запросе сфинкса.

Кроме того, вы можете создать динамический атрибут сфинкса, по которому вы можете фильтровать. например,

 sql_query = SELECT id, \
               title,  \
               IF(title!='',1,0) AS title_is_not_blank \
             FROM table 

 sql_attr_uint = title_is_not_blank

Затем убедитесь, что вы выбрали title_is_not_blank=1 для каждого поиска.

Или, в зависимости от вашего приложения, если никогда никогда не нужны приложения с пустым содержимым, просто удалите их с предложением sql_query WHERE. например,

 sql_query = SELECT id, \
               title  \
             FROM table 
             WHERE title!=''
0 голосов
/ 23 февраля 2011

Используйте 2 отдельных индекса; один со всеми данными, один только со строками, в которых есть данные в этой ячейке, которые вас интересуют, затем вы можете указать, какой индекс использовать во время запроса.

...