Выборка документов с отрицательным условием “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 будут содержать все документы.

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

Что такое прокси-сервер: пояснение простыми словами, зачем нужны прокси

Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…

21.11.2024

Что такое PWA приложение? Зачем необходимо прогрессивное веб-приложение

Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…

19.11.2024

Как создать игру на телефоне: программирование с помощью конструктора

Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…

17.11.2024

Google Bard: эффективный аналог ChatGPT

В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…

14.11.2024

Скрипт и программирование: что это такое простыми словами

Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…

12.11.2024

Дедлайн в разработке: что это такое простыми словами

Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…

11.11.2024