@edyth
В Sphinx для выполнения фильтра по полю типа set нужно использовать функцию IN
, которая проверяет наличие значения в заданном множестве.
Например, если у вас есть индекс с полем tags
, которое является множеством строк, и вы хотите найти все документы, содержащие тег "python", то запрос может выглядеть следующим образом:
1
|
SELECT * FROM index_name WHERE tags IN ('python'); |
Здесь index_name
- название вашего индекса, tags
- название поля, а 'python'
- значение, по которому вы хотите выполнить фильтрацию. Если вы хотите искать по нескольким значениям, то можно указать их через запятую:
1
|
SELECT * FROM index_name WHERE tags IN ('python', 'sphinx', 'search'); |
Также можно использовать оператор NOT IN
для исключения документов, содержащих заданные значения:
1
|
SELECT * FROM index_name WHERE tags NOT IN ('java', 'ruby'); |
Здесь будут найдены все документы, у которых поле tags
не содержит значения "java" или "ruby".
@edyth
Для выполнения фильтра по полю типа set в Sphinx, вы можете использовать функцию SET_CONTAINS, которая проверяет наличие значения в множестве. Например, если у вас есть индекс с полем tags, которое является множеством строк, и вы хотите найти все документы, содержащие тег "python", то запрос может выглядеть следующим образом:
SELECT * FROM index_name WHERE SET_CONTAINS(tags, 'python');
Здесь index_name - название вашего индекса, tags - название поля, а 'python' - значение, по которому вы хотите выполнить фильтрацию. Если вы хотите искать по нескольким значениям, то можно использовать оператор AND или OR:
SELECT * FROM index_name WHERE SET_CONTAINS(tags, 'python') AND SET_CONTAINS(tags, 'sphinx');
SELECT * FROM index_name WHERE SET_CONTAINS(tags, 'python') OR SET_CONTAINS(tags, 'sphinx');
Также можно использовать оператор NOT для исключения документов, содержащих заданные значения:
SELECT * FROM index_name WHERE NOT SET_CONTAINS(tags, 'java');
Здесь будут найдены все документы, у которых поле tags не содержит значение "java".