blog-post

OR внутри фразы, кворум и близость

Если вам когда-либо приходилось писать несколько запросов, чтобы захватить все вариации фразы, вы знаете, насколько это может быть утомительно и запутанно. С новой поддержкой оператора OR внутри фраз вы можете сопоставлять “счастливый клиент” и “грустный клиент” — плюс любые другие варианты — в одном чистом запросе.

Что нового в Manticore Search 13.6.7

Мы рады сообщить, что Manticore Search 13.6.7 был выпущен с улучшенной поддержкой этой полезной функции. Оператор OR (|) внутри операторов фраз (кавычки) предоставляет гибкое сопоставление фраз, которое может улучшить то, как вы строите функциональность поиска.

Магия OR в фразах

Традиционные поисковые системы заставляют вас выбирать между точным сопоставлением фразы и свободным сопоставлением ключевых слов. Но что, если вам нужно что-то промежуточное? Вот тут и сияют операторы OR внутри фраз. Каждый вариант проверяется на одной и той же позиции внутри фразы, и фраза совпадает, если любой из альтернатив подходит для этой позиции.

Синтаксис, который имеет смысл

"( a | b ) c"                           -- Either "a c" or "b c"
"( ( a b c ) | d ) e"                   -- Either "a b c e" or "d e"  
"man ( happy | sad ) but all ( ( as good ) | ( as fast ) )"  -- Complex nested possibilities

Давайте посмотрим это в действии

Создадим пример из реальной жизни, используя данные обратной связи от клиентов. Сначала настроим нашу тестовую среду:

-- Clean slate for easy reproduction
DROP TABLE IF EXISTS phrase_or_demo;

CREATE TABLE phrase_or_demo (title TEXT, content TEXT, category TEXT);

INSERT INTO phrase_or_demo (id, title, content, category) VALUES 
(1, 'Happy Customer Review', 'I am a very happy customer with excellent service', 'reviews'),
(2, 'Sad Customer Feedback', 'I am a very sad customer with poor experience', 'reviews'), 
(3, 'Customer Service Report', 'The customer was happy but had some concerns', 'reports'),
(4, 'Angry Customer Complaint', 'I am an angry customer demanding refund', 'complaints'),
(5, 'Neutral Customer Survey', 'The customer seemed neutral about our service', 'surveys'),
(6, 'Fast Delivery Service', 'Our delivery service is really fast and reliable', 'services'),
(7, 'Slow Delivery Issues', 'The delivery was extremely slow this time', 'issues'),
(8, 'Good Service Quality', 'We provide good service to all customers', 'services'),
(9, 'Bad Service Report', 'There were complaints about bad service quality', 'reports'),
(10, 'Customer Happy Experience', 'The happy customer left positive feedback', 'feedback'),
(11, 'Premium Quality Product', 'This is a premium quality item with excellent features', 'products'),
(12, 'Budget Quality Option', 'A budget quality alternative for cost-conscious buyers', 'products'),
(13, 'Standard Quality Service', 'Our standard quality offering meets basic needs', 'services');

Пример 1: Поймать все эмоциональные состояния

Запрос: "(счастливый | грустный | сердитый) клиент"

SELECT * FROM phrase_or_demo WHERE MATCH('"(happy | sad | angry) customer"')

Результат:

+------+---------------------------+---------------------------------------------------+------------+
| id   | title                     | content                                           | category   |
+------+---------------------------+---------------------------------------------------+------------+
|    2 | Sad Customer Feedback     | I am a very sad customer with poor experience     | reviews    |
|    4 | Angry Customer Complaint  | I am an angry customer demanding refund           | complaints |
|    1 | Happy Customer Review     | I am a very happy customer with excellent service | reviews    |
|   10 | Customer Happy Experience | The happy customer left positive feedback         | feedback   |
+------+---------------------------+---------------------------------------------------+------------+
4 rows in set (0.00 sec)

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

Пример 2: Вариации качества обслуживания

Запрос: "(хороший | плохой | премиум | бюджетный | стандартный) (обслуживание | качество)"

SELECT * FROM phrase_or_demo WHERE MATCH('"(good | bad | premium | budget | standard) (service | quality)"');

Результат:

+------+--------------------------+--------------------------------------------------------+----------+
| id   | title                    | content                                                | category |
+------+--------------------------+--------------------------------------------------------+----------+
|    8 | Good Service Quality     | We provide good service to all customers               | services |
|    9 | Bad Service Report       | There were complaints about bad service quality        | reports  |
|   11 | Premium Quality Product  | This is a premium quality item with excellent features | products |
|   12 | Budget Quality Option    | A budget quality alternative for cost-conscious buyers | products |
|   13 | Standard Quality Service | Our standard quality offering meets basic needs        | services |
+------+--------------------------+--------------------------------------------------------+----------+
5 rows in set (0.00 sec)

Преимущество: Один запрос захватывает все комбинации качества - обслуживания с точностью фразы.

За пределами базовых фраз: кворум и близость

Оператор OR не ограничивается простыми фразами. Иногда вам нужна большая гибкость, например, сопоставление документов, даже если не все термины присутствуют, или поиск терминов, которые находятся рядом, но не обязательно в точном порядке. Вот тут и приходят на помощь операторы кворума и близости , которые отлично работают с OR.

Кворум с OR: Гибкое нечеткое сопоставление

Оператор кворума с OR дает вам сложное нечеткое сопоставление, где только одно слово из каждой группы OR считается для выполнения порога:

-- Find documents with at least 2 out of these word groups
SELECT id, content FROM phrase_or_demo  WHERE MATCH('@content "(excellent | good | premium) (service | quality | experience) customer"/2');

Результат:

+------+--------------------------------------------------------+
| id   | content                                                |
+------+--------------------------------------------------------+
|    8 | We provide good service to all customers               |
|    1 | I am a very happy customer with excellent service      |
|   11 | This is a premium quality item with excellent features |
|    2 | I am a very sad customer with poor experience          |
|    5 | The customer seemed neutral about our service          |
+------+--------------------------------------------------------+
5 rows in set (0.00 sec)

Объяснение: Это сопоставляет документы, содержащие как минимум 2 из 3 групп слов: (отличный|хороший|премиум), (обслуживание|качество|опыт) и “клиент”.

Расширенный пример кворума

-- Match documents with at least 50% of these emotion/service combinations
SELECT id, title FROM phrase_or_demo 
WHERE MATCH('"(happy | satisfied) (customer | experience) (excellent | good) (service | quality)"/0.5');

Близость с OR: Альтернативы соседства

Оператор близости с OR проверяет каждую альтернативу отдельно в пределах заданного расстояния:

-- Find "delivery" within 3 words of either "fast" or "slow"
SELECT id, title, content FROM phrase_or_demo WHERE MATCH('"(fast | slow) delivery"~3');

Результат:

+------+-----------------------+--------------------------------------------------+
| id   | title                 | content                                          |
+------+-----------------------+--------------------------------------------------+
|    7 | Slow Delivery Issues  | The delivery was extremely slow this time        |
|    6 | Fast Delivery Service | Our delivery service is really fast and reliable |
+------+-----------------------+--------------------------------------------------+
2 rows in set (0.00 sec)

Сложный пример близости

-- Customer and emotional state within 5 words, plus quality terms
SELECT id, title, content FROM phrase_or_demo  WHERE MATCH('"customer (happy | sad | angry)"~2 (quality | service | experience)');

Результат:

+------+---------------------------+---------------------------------------------------+
| id   | title                     | content                                           |
+------+---------------------------+---------------------------------------------------+
|   10 | Customer Happy Experience | The happy customer left positive feedback         |
|    2 | Sad Customer Feedback     | I am a very sad customer with poor experience     |
|    1 | Happy Customer Review     | I am a very happy customer with excellent service |
|    3 | Customer Service Report   | The customer was happy but had some concerns      |
+------+---------------------------+---------------------------------------------------+
4 rows in set (0.00 sec)

Сравнение: Традиционный vs. Современный

Традиционный подход (Несколько полных текстовых заявлений)

-- The old way: multiple separate queries
SELECT id, title FROM phrase_or_demo WHERE MATCH('"happy customer"|"sad customer"|"angry customer"');

Современный подход (Одна фраза с OR)

-- The elegant way: one query to rule them all
SELECT id, title FROM phrase_or_demo WHERE MATCH('"(happy | sad | angry) customer"');

Применение в реальном мире

1. Поиск продуктов в электронной коммерции

-- Capture all color and size variations
"(red | blue | green | black) (shirt | t-shirt | tee) (small | medium | large)"

2. Системы управления контентом

-- Track document status changes
"(draft | published | archived | deleted) (document | article | post)"

3. Анализ тикетов службы поддержки клиентов

-- Categorize support issues with quorum
"(urgent | critical | high) (priority | importance) (bug | issue | problem)"/2

4. Мониторинг настроений в социальных сетях

-- Capture brand mentions with emotional context  
"@brand (love | hate | like | dislike) (product | service | experience)"~5

5. Поиск медицинских записей

-- Find patient symptoms with proximity
"patient (experienced | reported | complained) (pain | discomfort | symptoms)"~4

6. Анализ финансовых транзакций

-- Track transaction types and statuses
"(credit | debit | transfer) (completed | pending | failed | cancelled)"

Расширенные модели использования

1. Сложная точность

Комбинируйте фразу OR с другими операторами для хирургической точности:

@title "(urgent | critical) (update | patch)" @body "security"

2. Оптимизация производительности

Используйте кворум с OR для нечеткого сопоставления, которое может быть быстрее, чем поиск с подстановочными знаками:

"(run | running | runner | runs) (fast | quick | speed)"/1

3. Контекстуальная гибкость

Используйте близость OR для естественных языковых вариаций:

"user (wants | needs | requires) (feature | functionality)"~3

Ключевые преимущества

  1. Точность: Поддерживайте точную структуру фразы, учитывая вариации
  2. Поддерживаемость: Один запрос для обновления вместо управления несколькими вариациями
  3. Аналитика: Единые наборы результатов делают анализ и рейтинг более значимыми
  4. Гибкость: Эффективно обрабатывает вариации реального языка

Итог

Операторы OR внутри фраз предоставляют полезный промежуточный вариант между жестким точным поиском и свободным сопоставлением ключевых слов. Независимо от того, строите ли вы поиск в электронной коммерции, анализируете отзывы клиентов или создаете системы обнаружения контента, эта функция предлагает точность фраз с гибкостью альтернатив.

Manticore Search 13.6.7 включает эту функциональность как часть своих полномасштабных возможностей текстового поиска. Комбинация операторов фраз, близости и кворума с функциональностью OR предоставляет дополнительные возможности для обработки сложных требований поиска.

Чтобы узнать больше об этой функции и других улучшениях, смотрите примечания к выпуску Manticore Search 13.6.7 .

Установить Manticore Search

Установить Manticore Search