Java 8+ 용으로 구현 된 간단한 크로스 데이터 스토어 전체 텍스트 검색 언어
전체 텍스트 검색은 최신 응용 프로그램의 주요 기능입니다. 그러나 다양한 데이터 저장소는 전체 텍스트 검색을 수행하기 위해 서로 다른 구문을 노출 시키며 이러한 구문 중 다수는 사용자 친화적이지 않습니다. 일부 데이터 스토어는 전체 텍스트 검색 기능을 전혀 노출하지 않습니다! 따라서 개발자가 일관된 사용자를 대상으로하는 검색 경험을 노출하기가 어렵습니다. Litecene은 BigQuery와 같은 인기있는 데이터 저장소로 변환 된 Lucene 구문을 기반으로하는 친숙한 표준 쿼리 언어로, 개발자가 응용 프로그램 매장의 전체 텍스트 검색 기능을 최대한 활용하면서 개발자가 사용자에게 일관되고 사용자 친화적 인 검색 구문을 쉽게 노출 할 수 있도록합니다.
이 섹션에서는 일반적인 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은 용어, 문구, 목록, 그룹 및 OR이 아닌 7 가지 검색 조항 유형을 지원합니다.
용어 절은 인용되지 않은 비 whitescace 문자입니다. 일치하는 문서에는 주어진 용어가 포함되어야합니다. 다음은 모두 유효한 조명 조항입니다.
helloworldwhat's#selfie@twitterhttps://www.example.com/this/is/a/hyperlink 용어 절은 또한 접두사 검색을 나타내는 와일드 카드 ( * )로 끝날 수 있습니다. 이 경우 일치하는 문서에는 주어진 접두사가있는 용어가 포함되어야합니다. 다음은 모두 유효한 Litecene Prefix 용어 조항입니다.
developer*what's*https://www.example.com/*문구 절은 인용 된 문자입니다. 일치하는 문서는 서로 옆에 주어진 용어를 포함해야합니다. 다음은 모두 유효한 litecene 문구 조항입니다.
"hello, world!""The rain in Spain falls mainly on the plains.""super cool search" 문구 절의 용어는 접두사 검색을 나타 내기 위해 와일드 카드 ( * )로 끝날 수 있습니다. 이 경우, 일치하는 문서는 주어진 접두사와 함께 주어진 용어를 포함해야합니다. 다음은 와일드 카드 용어를 가진 모두 유효한 litecene 문구 조항입니다.
"It wa* the best of times""It was the wors* of times" 문구 절은 즉시 tilde ( ~ )와 정수 번호가 나와 근접 검색을 나타낼 수 있습니다. 이 경우 일치하는 문서는 주어진 정규 또는 접두사 용어를 순서로 주어진 수의 용어 수에 포함해야합니다. 근접 길이는 문구의 용어 수 이상이어야합니다. 다음은 근접성을 가진 유효한 litecene 문구 조항입니다.
"hello, world!"~8"It wa* the best of times"~10목록 조항은 공백으로 분리 된 둘 이상의 유효한 litecene 검색 조항입니다. 일치하는 문서는 주어진 조항과 순서대로 일치해야합니다. 다음은 모두 유효한 litecene 문구 조항입니다.
hello, world!The rain in Spain falls mainly on the plains.engineer* "developer* productivity"~8 그룹 조항은 괄호 ( ) 로 둘러싸인 다른 유효한 Litcene 검색 조항입니다. 일치하는 문서는 포함 된 절과 일치해야합니다. 다음은 모두 유효한 Litecene 그룹 조항입니다.
(hello world)(engineer* "developer* productivity"~10)그룹 조항은 주로 다중 및 및 또는 조항을 포함하는 복잡한 쿼리를 명확히하기 위해 사용됩니다.
AN 및 조항은 유효한 LiteCene 검색 조항과 키워드 AND 다른 Litecene 검색 조항입니다. 다중 AND 조항은 동일하고 조항에 추가 될 수 있습니다. 일치하는 문서는 주어진 모든 조항과 일치해야합니다. 다음은 모두 유효한 litecene 및 clauses입니다.
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 또는 clauses입니다.
hello OR world"My Fair Lady"~8 OR Pygmalion NOT 절은 키워드가 NOT 다른 Litecene 검색 조항이 아닙니다. 일치하는 문서는 주어진 절과 일치 하지 않아야 합니다. 다음은 절정이 아닌 모두 유효한 litcene입니다.
NOT helloNOT "hello, world!"NOT (engineer* AND "developer productivity"~10) 일부 쿼리 백엔드는 조항이 NOT 쿼리를 허용하지 않습니다.
응용 프로그램에서 litecene을 사용하는 방법의 예는 응용 프로그램 데이터 저장소의 readme를 참조하십시오.
새로운 데이터 저장소 통합에는 두 부분이 있습니다. Litecene Query 객체를 데이터 저장소의 기본 구문으로 변환하는 쿼리 트랜스 필러; 검색을 위해 데이터 저장소에서 텍스트를 준비하는 방법. 이 두 구성 요소는 올바른 검색 시맨틱을 구현하기 위해 함께 작동해야합니다.
예를 들어, BigQuery Data Store 통합은 ASCII 라틴 문자 및 숫자 만 검색합니다. 따라서 SQL 술어로 변환되기 전에 검색되지 않은 문자를 적절하게 처리하려면 쿼리를 후 처리해야하며, 데이터 저장소의 데이터는 검색되지 않은 문자를 제거하기 위해 전처리되어야하며, 처리 된 두 가지 모두가 서로 동의하도록 수행해야합니다.
새로운 데이터 통합 백엔드는 제안 된 쿼리 분석 파이프 라인과 데이터 전처리에 대한 제안 된 접근 방식을 구성하기 위해 도우미를 구현해야합니다.
Litecene은 다음 파이프 라인을 구현하여 데이터 스토어 통합 개발자가 복잡한 처리 규칙을 빠르고 쉽게 구축 할 수 있도록합니다.
litecene 모든 쿼리 텍스트를 일련의 코드 포인트로 간주합니다. CodePointStream 은 순서대로 일련의 코드 포인트입니다. LiteCene Core에는 다음 코드 포인트 필터가 포함됩니다.
SmartQuotesCodePointFilter "스마트 인용문"을 "직선 인용"으로 변환합니다.코드 포인트 필터는 한 코드 포인트를 다른 코드 포인트에 매핑 할 수 있지만 코드 포인트를 추가하거나 제거 할 수는 없습니다.
Litecene은 토큰 화를 사용하여 코드 포인트를 토큰으로 변환합니다. TokenStream 순서대로 일련의 토큰입니다. Litecene Core에는 다음 토큰 필터가 포함되어 있습니다.
LetterNumberTokenFilter 모든 비 알파 너매 문자를 공백으로 대체합니다. 유니 코드 카테고리 문자 및 번호는 영숫자 텍스트를 정의하는 데 사용됩니다.LowercaseTokenFilter 모든 텍스트를 소문자로 변환합니다.NormalizeTokenFilter 텍스트에서 유니 코드 NFKD 정규화를 수행하고 모든 유니 코드 마크 문자를 제거합니다.PrintableAsciiTokenFilter 0x20-0x7E 가 아닌 모든 문자를 공백으로 대체합니다.토큰 필터는 토큰 텍스트를 임의적으로 변경할 수 있지만 토큰을 추가하거나 제거 할 수는 없습니다.
Litecene은 QueryPipeline 사용하여 임의의 쿼리 변환을 허용합니다. LiteCene Core에는 다음 쿼리 파이프 라인이 포함되어 있습니다.
SimplifyQueryFilterPipeline 쿼리를 구조 조정하여 "공허한"용어를 제거하고 (예 : 텍스트가없는 용어) 논리를 단순화하고 (예 : 인접 및 쿼리를 병합) 단순화합니다. Litecene의 로드맵은 항상 여기에서 사용할 수 있습니다. 피드백이 있으면 자유롭게 열거 나 문제에 대해 의견을 보내주십시오!