Если вам когда-либо приходилось писать несколько запросов, чтобы захватить все варианты фразы, вы знаете, как это может быть повторяющимся и запутанным. С новой поддержкой 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)
Сравнение: Традиционный против Современного
Традиционный подход (Несколько полных текстовых заявлений)
-- 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
Ключевые преимущества
- Точность: Сохраняйте точную структуру фразы, учитывая вариации
- Удобство обслуживания: Один запрос для обновления вместо управления несколькими вариациями
- Аналитика: Объединенные наборы результатов делают анализ и ранжирование более значимыми
- Гибкость: Эффективно обрабатывает вариации реального языка
Итог
Операторы OR внутри фраз предоставляют полезный средний вариант между жестким точным поиском и свободным сопоставлением ключевых слов. Независимо от того, строите ли вы поиск в электронной коммерции, анализируете обратную связь от клиентов или создаете системы обнаружения контента, эта функция предлагает точность фраз с гибкостью альтернатив.
Manticore Search 13.6.7 включает эту функциональность как часть своих комплексных возможностей текстового поиска. Сочетание операторов фраз, близости и кворума с функциональностью OR предоставляет дополнительные возможности для обработки сложных требований поиска.
Чтобы узнать больше об этой функции и других улучшениях, смотрите заметки о выпуске Manticore Search 13.6.7 .
