Простой полный текстовый поиск в магазине, реализованный для Java 8+
Полнотекстовый поиск является ключевой особенностью современных приложений. Тем не менее, различные хранилища данных обнажают различные синтаксисы для выполнения полнотекстового поиска, и многие из этих синтаксисов не являются удобными для пользователя. Некоторые хранилища данных вообще не обнажают полнотекстовых функций поиска вообще! Это затрудняет разработчики, чтобы выявить постоянный пользовательский поисковый опыт. LiteCene-это знакомый стандартный язык запросов, основанный на синтаксисе Lucene с транспиллерами, в популярные хранилища данных, такие как BigQuery, что позволяет разработчикам легко разоблачить постоянный, удобный для пользователя синтаксис поиска, при этом максимально использует полнотекстовые функции их хранилища приложений.
В этом разделе описывается общий синтаксис запросов Litecene. Обратите внимание, что различные трансбира могут реализовать текстовый поиск одного и того же запроса по -разному. В этом разделе просто описывается то, что представляет собой действительный запрос и логическое определение совпадения; Каждый реализация транспилера документирует, как точно соответствуют действительные запросы в соответствующем хранилище данных.
Например, это может быть хорошим запросом Litecene для выявления сообщений в социальных сетях, упоминающих общие способы, которыми люди пользователь используют свои смартфоны:
(smartphone OR "smart phone" OR iphone OR "apple phone" OR android OR "google phone" OR "windows phone" OR "phone app"~8) AND (call OR dial OR app OR surf OR browse OR camera OR picture OR pic OR selfie)
LiteCene поддерживает семь типов поиска: термин, фраза, список, группы и, или, а не.
Сторог термина-это некваленная строка непрерывных символов. Соответствующий документ должен содержать заданный термин. Ниже приведены все действительные положения о лицевых терминах:
helloworldwhat's#selfie@twitterhttps://www.example.com/this/is/a/hyperlink Статья термина может также заканчиваться подстановочным знаком ( * ), чтобы указать поиск префикса. В этом случае соответствующий документ должен содержать термин с данным префиксом. Ниже приведены все действительные предварительные условия Litecene Prefix:
developer*what's*https://www.example.com/*Фразовый пункт - это цитируемая строка символов. Соответствующий документ должен содержать заданные термины рядом друг с другом. Ниже приведены все действительные положения о лицевой фразе:
"hello, world!""The rain in Spain falls mainly on the plains.""super cool search" Термин в пункте фразы может закончиться подстановочным знаком ( * ), чтобы указать поиск префикса. В этом случае соответствующий документ должен содержать заданные термины с данными префиксами рядом друг с другом. Ниже приведены все действительные положения о лицевой фразе с терминами подстановочного знака:
"It wa* the best of times""It was the wors* of times" Фразовый пункт может сразу же следовать тильде ( ~ ) и целочисленным номером, чтобы указать поиск близости. В этом случае соответствующий документ должен содержать все заданные регулярные или префиксы в определенном количестве условий друг друга в любом порядке. Длина близости должна быть не менее количества терминов в фразе. Ниже приведены достоверные положения о лицевой фразе с близостью:
"hello, world!"~8"It wa* the best of times"~10Список пункта - это два или более действительных положения о поиске Litecene, разделенные WhiteSpace. Соответствующий документ должен соответствовать данным предложениям в любом порядке. Ниже приведены все действительные положения о лицевой фразе:
hello, world!The rain in Spain falls mainly on the plains.engineer* "developer* productivity"~8 Групповой пункт - это любая другая допустимая оговорка об поиске Litcene, окруженную скобками ( ) . Соответствующий документ должен соответствовать содержанию. Ниже приведены все действительные клаузы Litecene Group:
(hello world)(engineer* "developer* productivity"~10)Групповые положения используются в основном для уточнения сложных запросов, содержащих несколько и или или или положения.
А и пункт является действительным пунктом поиска в LiteCene, за которым следует ключевое слово AND затем еще один пункт об поиске LiteCene. Многочисленные AND предложения могут быть добавлены к одному и тому же и пункту. Соответствующий документ должен соответствовать всем данным предложениям. Ниже приведены все действительные Litecene и положения:
hello AND worldThe rain in Spain falls mainly on the plains AND "My Fair Lady"~8engineer* AND "developer productivity"~10 Основ или пункт - это действительный пункт поиска в LiteCene, за которым следует ключевое слово OR последовало за другим пунктом поиска LiteCene. Многочисленные OR предложения могут быть добавлены к одному и тому же или пункту. Когда и или или положения чередованы, AND оператор крепче связывается. Групповой пункт может быть использован, чтобы сделать запрос более ясным и легче понять. Соответствующий документ должен соответствовать как минимум одним из данных. Ниже приведены все действительные Litecene или положения:
hello OR world"My Fair Lady"~8 OR Pygmalion Не оговорка - это NOT ключевое слово, за которым следует еще один пункт поиска в LiteCene. Соответствующий документ не должен соответствовать данному пункту. Ниже приведены все действительное Litcene, а не положения:
NOT helloNOT "hello, world!"NOT (engineer* AND "developer productivity"~10) Некоторые бэкэнды запроса не допускают запроса, который содержит только NOT .
Примеры того, как использовать Litecene в вашем приложении, см. Readme для хранилища данных вашего приложения.
Новая интеграция хранилища данных имеет две части: транспилер запроса, который преобразует объект Query Litecene в натуральный синтаксис хранилища данных; и метод подготовки текста в хранилище данных для поиска. Эти два компонента должны работать вместе для реализации правильной семантики поиска.
Например, интеграция хранилища данных BigQuery ищет только латинские буквы и цифры ASCII. Следовательно, запрос должен быть постопроц обрабатывается для правильного обработки не поисковых символов, прежде чем он может быть преобразован в предикат SQL, и данные в хранилище данных должны быть предварительно обработаны для устранения не поисковых символов, и оба из этих обработанных должны быть сделаны так, что они согласуются друг с другом.
Новый бэкэнд интеграции данных должен реализовать помощника для построения предлагаемого конвейера анализа запросов и предлагаемого подхода к предварительной обработке данных.
Litecene реализует следующие трубопроводы, позволяющие разработчикам интеграции хранилища данных быстро и легко создавать сложные правила обработки.
Litecene рассматривает весь текст запроса как последовательность кодовых точек. CodePointStream представляет собой упорядоченную последовательность кодовых точек. Litecene Core содержит следующие фильтры точки кода:
SmartQuotesCodePointFilter - преобразует «Smart Quotes» в «Прямые цитаты»Фильтры точек кода могут отобразить одну кодовую точку с другой, но не могут добавить или удалить кодовые точки.
Litecene использует токен для преобразования кодовых точек в токены. TokenStream представляет собой упорядоченную последовательность токенов. Litecene Core содержит следующие токеновые фильтры:
LetterNumberTokenFilter -заменяет все не альфанокочелевые символы на пробел. Буква и число категорий Unicode используются для определения буквенно -цифрового текста.LowercaseTokenFilter - преобразует весь текст в нижний регистр.NormalizeTokenFilter - выполняет нормализацию Unicode NFKD в тексте и удаляет все символы Unicode Mark.PrintableAsciiTokenFilter -заменяет все символы, не в 0x20-0x7E с помощью пробела.Токеновые фильтры могут вносить произвольные изменения в текст токена, но не могут добавить или удалить токены.
Litecene допускает произвольные преобразования запросов, используя QueryPipeline . Litecene Core содержит следующие конвейеры запроса:
SimplifyQueryFilterPipeline - реструктуризация запроса для удаления «бессмысленных» терминов (например, термины без текста) и упростите логику (например, слияние соседних и запросов) Дорожная карта Litecene всегда доступна здесь. Пожалуйста, не стесняйтесь открывать или комментировать проблемы, если у вас есть отзывы!