Как искать фразу с подстановочными знаками в GroupDocs.Search для Java
В современных приложениях, ориентированных на документы, как искать фразу быстро и точно является решающим фактором для пользовательского опыта. Независимо от того, создаёте ли вы базу знаний, каталог электронной коммерции или репозиторий, управляемый требованиями соответствия, возможность находить точную фразу — или её гибкую вариацию — повышает продуктивность пользователей и снижает нагрузку на поддержку. Этот учебник проведёт вас через установку GroupDocs.Search for Java, создание поискового индекса, загрузку документов и выполнение как точных, так и запросов с подстановочными знаками, предоставляя чёткие, готовые к продакшн‑использованию фрагменты кода.
Быстрые ответы
- Какова основная выгода от поиска фраз? Точное совпадение порядка слов и их близости, гарантируя, что возвращаются только документы, содержащие точную последовательность.
- Можно ли использовать подстановочные знаки внутри фразы? Да — подстановочные знаки позволяют пропускать или заменять слова, сохраняя общий порядок.
- Нужна ли лицензия для разработки? Бесплатная пробная версия подходит для тестирования; полная лицензия требуется для продакшн‑развёртываний.
- Какую версию Maven следует использовать? Последний релиз GroupDocs.Search for Java (например, 25.4 на момент написания).
- Подходит ли этот подход для больших наборов документов? Абсолютно — GroupDocs.Search может обрабатывать сотни тысяч документов с субсекундной задержкой запросов при оптимизированном индексе.
Что такое «как искать фразу»?
Поиск фразы означает поиск конкретной последовательности слов в документе.
Когда вы выполняете запрос фразы, движок проверяет, что слова находятся в точном порядке и в заданной близости, исключая нерелевантные совпадения, содержащие те же слова в другом контексте. Это делает поиск фраз идеальным для нахождения юридических пунктов, кодов продуктов или любого текста, где важен порядок.
Почему использовать GroupDocs.Search для запросов фраз и подстановочных знаков?
GroupDocs.Search обеспечивает высокопроизводительное индексирование до 1 миллиона документов при сохранении субсекундных откликов запросов на типичном серверном оборудовании. Его язык запросов поддерживает точные фразы, простые * и ? подстановочные знаки, а также расширенные шаблоны, такие как числовые диапазоны (*2~5). Библиотека интегрируется с любым Java‑приложением через Maven или прямую загрузку JAR и работает на Java 8+ без внешних сервисов.
Требования
- Java 8 или новее (рекомендован Java 11 LTS).
- Maven 3 или новее (если вы предпочитаете управление зависимостями).
- Базовое знакомство со структурой проекта Java и объектно‑ориентированными концепциями.
Настройка GroupDocs.Search для Java
Использование Maven
Добавьте официальный репозиторий и зависимость GroupDocs.Search в ваш pom.xml:
<!-- Maven repository -->
<repositories>
<repository>
<id>groupdocs-releases</id>
<url>https://repository.groupdocs.com/release</url>
</repository>
</repositories>
<!-- GroupDocs.Search dependency -->
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-search</artifactId>
<version>25.4</version>
</dependency>
Прямое скачивание
В качестве альтернативы загрузите последний JAR со страницы официальных релизов: GroupDocs.Search for Java releases.
Приобретение лицензии
- Free Trial: Идеально для быстрых экспериментов; ограничено 100 MB индексированных данных.
- Temporary License: Запросите 30‑дневный оценочный ключ в портале GroupDocs.
- Full License: Требуется для продакшн‑использования и неограниченной ёмкости индекса.
Базовая инициализация и настройка
Создайте папку, в которой будут храниться файлы индекса, и создайте объект Index. Класс Index представляет поисковый индекс, хранящийся на диске, и предоставляет методы для добавления, обновления и выполнения запросов к документам.
<repositories>
<repository>
<id>repository.groupdocs.com</id>
<name>GroupDocs Repository</name>
<url>https://releases.groupdocs.com/search/java/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-search</artifactId>
<version>25.4</version>
</dependency>
</dependencies>
Добавьте документы, которые необходимо сделать доступными для поиска:
String indexFolder = "YOUR_OUTPUT_DIRECTORY/PhraseSearch";
Index index = new Index(indexFolder);
Как искать фразу с подстановочными знаками в GroupDocs.Search
В этом разделе демонстрируются три уровня поиска фраз — точное совпадение, простой подстановочный знак и расширенные шаблоны — показывая, как создать индекс, добавить документы и выполнить каждый тип запроса с помощью лаконичного кода Java. Примеры иллюстрируют как текстовые запросы, так и объектно‑ориентированное построение запросов, позволяя разработчикам интегрировать гибкие возможности поиска в свои приложения.
Простой поиск фразы
Обзор
Используйте этот подход, когда требуется точное совпадение последовательности слов, например юридический пункт или номер модели продукта.
Прямой ответ
Загрузите индекс, вызовите search с фразой в кавычках (например, "quick brown fox"), и движок вернёт только документы, содержащие эту точную последовательность, сохраняя порядок слов и пробелы. Запрос выполняется за миллисекунды, даже в индексах, содержащих сотни тысяч файлов.
Шаг 1: Создать индекс
String documentsFolder = "YOUR_DOCUMENT_DIRECTORY";
index.add(documentsFolder);
Шаг 2: Добавить документы в индекс
Index index = new Index(indexFolder);
Шаг 3: Поиск конкретной фразы (текстовая форма)
index.add(documentsFolder);
Шаг 4: Объектно‑ориентированные запросы (поиск точной фразы)
String queryText = "\"sollicitudin at ligula\"";
SearchResult resultText = index.search(queryText);
Поиск фразы с подстановочными знаками
Обзор
Подстановочные знаки (* — любое количество символов, ? — один символ) позволяют пропускать переменные слова, сохраняя при этом порядок окружающих слов.
Прямой ответ
Вставьте токен подстановочного знака (*) внутрь кавычек — например, "quick * fox" — чтобы сопоставить любые слово(а) между quick и fox. Движок разворачивает подстановочный знак во время выполнения запроса, просматривая только индексированные термины, удовлетворяющие шаблону, что сохраняет производительность, сравнимую с обычным запросом фразы.
Шаг 1: Создать индекс
- (То же, что и простой поиск фразы.)*
Шаг 2: Добавить документы в индекс
- (То же, что и выше.)*
Шаг 3: Текстовый поиск с подстановочными знаками
SearchQuery word1 = SearchQuery.createWordQuery("sollicitudin");
SearchQuery word2 = SearchQuery.createWordQuery("at");
SearchQuery word3 = SearchQuery.createWordQuery("ligula");
SearchQuery queryObject = SearchQuery.createPhraseSearchQuery(word1, word2, word3);
SearchResult resultObject = index.search(queryObject);
Шаг 4: Объектно‑ориентированные запросы с подстановочными знаками (Wildcard Search Java)
String queryText = "\"sollicitudin *0~~3 ligula\"";
SearchResult resultText = index.search(queryText);
Расширенный поиск с подстановочными знаками
Обзор
Комбинируйте числовые диапазоны, необязательные символы и пользовательские шаблоны, похожие на регулярные выражения, для сложного сопоставления, например номеров версий или кодов продуктов.
Прямой ответ
Используйте расширенный синтаксис подстановочного знака *min~max для определения диапазона допустимых расстояний между словами, или ? для сопоставления одного символа. Например, "error *2~5 code" найдёт слово error, за которым следуют от двух до пяти слов, а затем code. Такая точность уменьшает количество ложных срабатываний, сохраняя гибкость.
Шаг 1: Создать индекс
- (Повторено для ясности.)*
Шаг 2: Добавить документы в индекс
- (Повторено.)*
Шаг 3: Текстовый поиск со сложными шаблонами подстановочных знаков
SearchQuery word1 = SearchQuery.createWordQuery("sollicitudin");
SearchQuery wildcard2 = SearchQuery.createWildcardQuery(0, 3);
SearchQuery word3 = SearchQuery.createWordQuery("ligula");
SearchQuery queryObject = SearchQuery.createPhraseSearchQuery(word1, wildcard2, word3);
SearchResult resultObject = index.search(queryObject);
Шаг 4: Объектно‑ориентированные запросы с расширенными подстановочными знаками
String queryText = "\"sollicitudin *0~~3 ?(0~4)la\"";
SearchResult resultText = index.search(queryText);
Практические применения
- Content Management Systems: Редакторы могут находить точные пункты или гибкие отрывки без ручного сканирования сотен страниц.
- E‑commerce Catalogs: Покупатели находят товары даже если опускают описание или используют синонимы, благодаря поддержке подстановочных знаков.
- Legal & Compliance: Быстро изолировать договорной язык, который может появляться с небольшими вариациями в разных соглашениях.
Соображения по производительности
- Create Search Index только один раз для стабильного набора документов; переиспользуйте тот же экземпляр
Indexдля всех запросов. - Add Documents Incrementally при появлении новых файлов — избегайте полного перестроения индекса, чтобы снизить нагрузку на CPU.
- Design Precise Wildcard Patterns; более широкие шаблоны (
*) увеличивают количество расширений терминов и могут повысить нагрузку на CPU. - Call
index.optimize()периодически (если поддерживается) для сжатия индекса и контроля потребления памяти.
Распространённые проблемы и решения
| Проблема | Решение |
|---|---|
| Не возвращаются результаты для запроса с подстановочным знаком | Проверьте синтаксис подстановочного знака (*min~max) и убедитесь, что целевые слова находятся в заданном расстоянии. |
| Индекс устаревает после обновления файлов | Используйте index.add(updatedFolder) или API инкрементального обновления, чтобы обновлять только изменённые файлы. |
| Высокое потребление памяти на больших наборах данных | Увеличьте размер кучи JVM (-Xmx4g или больше) и рассмотрите возможность разделения индекса на несколько шардов для параллельной обработки. |
Часто задаваемые вопросы
В: В чём разница между подстановочным знаком и поиском фразы?
О: Поиск фразы требует точного порядка слов и пробелов, тогда как подстановочный знак позволяет заменять или пропускать слова внутри этого порядка, обеспечивая гибкое сопоставление.
В: Можно ли использовать подстановочные знаки с числовыми данными в поиске?
О: Да — параметры диапазона подстановочных знаков (*min~max) работают с числами так же, как и со словами, позволяя запросы типа "version *1~3".
В: Как работать с очень большими коллекциями документов?
О: Держите индекс оптимизированным, выполняйте инкрементные обновления и создавайте специфичные шаблоны подстановочных знаков, чтобы ограничить расширение терминов. GroupDocs.Search может индексировать 1 миллион документов, удерживая задержку запросов ниже 200 мс на стандартном оборудовании.
В: Подходит ли GroupDocs.Search для сценариев поиска в реальном времени?
О: Абсолютно — после построения индекса запросы выполняются за миллисекунды, что делает его идеальным для интерактивных поисковых полей и функций автодополнения.
В: Можно ли интегрировать эту библиотеку в существующий Java‑проект?
О: Да. Добавьте зависимость Maven или JAR, создайте экземпляр Index, как показано, и вы готовы выполнять запросы без изменения существующего кода.
Последнее обновление: 2026-05-28
Тестировано с: GroupDocs.Search 25.4 for Java
Автор: GroupDocs
double word1 = SearchQuery.createWordQuery("sollicitudin");
SearchQuery wildcard2 = SearchQuery.createWildcardQuery(0, 3);
WordPattern pattern = new WordPattern();
pattern.appendWildcard(0, 4);
pattern.appendString("la");
SearchQuery wordPattern3 = SearchQuery.createWordPatternQuery(pattern);
SearchQuery queryObject = SearchQuery.createPhraseSearchQuery(word1, wildcard2, wordPattern3);
SearchResult resultObject = index.search(queryObject);