Выборка документов с отрицательным условием “NOT MATCH” в Sphinx’e

admin

Если в Sphinx’e выполнить запрос, содержащий только отрицательное условие в MATCH секции, увидим такую ошибку:

SELECT * FROM products WHERE match('!leggings');

***ERROR 1064 (42000): index products: query is non-computable (single NOT operator)***


## Такой запрос нельзя выполнить

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

Это можно решить создав виртуальную колонку-индекс с уникальной строкой, которая будет повторяться в каждом документе. Пусть такой строкой будет “_all“, тогда запрос для построения индекса в Sphinx’e мы изменим таким образом:

source index_source

{

type = mysql

...

sql_query = SELECT id, title, body, **'_all' as default_text**

FROM products

...

}


## Добавляем виртуальную колонку в индекс

Тогда, после индексации, нужный нам результат мы получим следующим запросом:

SELECT * FROM products WHERE match**('_all !leggings')**;

Стоит обратить внимание, что этот прием имеет ряд нюансов. Во-первых увеличится размер индекса на диске. Это будет незаметно на крупных документах с большим количеством текста. Но если речь идет о большом количестве простых документов (например, индекс по названию товаров), это может увеличить индекс на несколько десятков процентов. Во-вторых, предлагаемый запрос может работать медленно на больших индексах, т.к. искомую строку _all будут содержать все документы.

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023