2016-07-12 4 views
1

Есть ли способ, чтобы сделать эту линию в сфинкса поискаГде статья имеет ИЛИ В Сфинкса

where field_a = 'Value' or field_b = 'Value' 

я пытался до сих пор

$sphinx->where(field_A | field_B, '=', 'Value') 

Но это не работает. Может ли кто-нибудь помочь мне преодолеть это?

ответ

4

Сам Сфинкс не поддерживает «ИЛИ» в предложении WHERE.

Но можно сделать что-то вроде

SELECT id, (attribute_a = 'Value' OR attribute_b = 'Value') AS test 
FROM index 
WHERE test = 1 

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

(Также обратите внимание, я изменил называть столбец, атрибуты вместо этого. Sphinx обрабатывает атрибуты и поля очень по-разному. Разъяснение это способ фильтрации атрибутов)

+0

Привет, Бэрри. Я думаю, что написать queyr, как и выше, приведет к полному просмотру атрибутов. Это может быть падение производительности, даже если все они хранятся в памяти. Я не уверен, что просто напишу «SELECT id FROM index WHERE attribute_a = 1;», может ли sphinx быстро индексировать поиск, чтобы найти все записи с атрибутом «attribute_a = 1» (может быть, через красно-черное дерево или хеш-карту)? Или все еще нужно полное сканирование памяти даже с помощью этого простого запроса? Спасибо :-) – ASBai

+0

Обратите внимание, что в sphinx запросы, основанные на атрибутах, являются «полными сканированиями» ALWAYS. ** Фильтры атрибутов будут выполняться против каждой строки **. Нет индексов атрибутов. (с полнотекстовым запросом, с другой стороны, используется специальный индекс, который относится ко всей точке сфинкса, его волшебный инвертированный индекс для быстрого выполнения текстовых запросов. Если речь идет о производительности фильтров, реализуйте через поля. ** быть быстрее, чем атрибуты) – barryhunter

+0

Спасибо за ваши хорошие советы barry :-), поэтому ** фильтрация или сортировка по атрибутам в сфинксе всегда будет выполняться с помощью «полного сканирования» **. Единственное, что мы можем оптимизировать для производительности запроса, - создать соответствующее текстовое поле, чтобы сфинкс использовал свой полный инвертированный индекс, например: 'MATCH ('@ attr_a 1 | 2 | 3')'? Или Можем ли мы создать плагин UDF, поддерживать в нем быстрый индекс и позволить sphinx использовать этот плагин для выполнения запросов и сортировки атрибутов? Как и то, что мы сделали для решения этой проблемы: http://sphinxsearch.com/forum/view.html?id=14391 – ASBai

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

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