Как выполнить фильтр по полю типа set в sphinx?

Пользователь

от edyth , в категории: Другие , 2 года назад

Как выполнить фильтр по полю типа set в sphinx?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от nelle , 2 года назад

@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".

Пользователь

от raina , год назад

@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".