2017-01-22 5 views
1

저는 Levenshtein과 Im을 사용하여 몇 가지 예를 찾고 싶습니다. 이미 설명서를 읽었지만 구현 방법을 모릅니다. 나는 내 자신의 분석기를 만들려고했지만, 그것을 사용할 때마다 추락했습니다. https://crate.io/docs/reference/sql/fulltext.htmlcrate.io FULLTEXT SEARCH fuzziness

예 테이블 :

CREATE TABLE IF NOT EXISTS "test"."accounts" (
    "customer_name" STRING INDEX USING FULLTEXT WITH (
     analyzer = 'standard' 
    ), 
"customer_no" STRING, 
    PRIMARY KEY ("customer_no") 
) 


INSERT INTO "test"."accounts" 
(customer_name, customer_no) 
VALUES('Walmart','C00001'); 

내 목표는 월마트를 월마트를 검색하고 반환하는 것입니다 여기에

내가 follwed 문서입니다.

답변

2

이 예제에서 사용하는 표준 분석기는 검색 단어 'wal-mart'(하이픈 때문에)를 두 개의 토큰, 'wal'과 'mart'로 나눕니다. 그대로이 뜻을 지수에게

create ANALYZER lowercase_keyword (
    TOKENIZER keyword, 
    TOKEN_FILTERS (
     lowercase 
    ) 
); 

말씀을 - 소문자로 돌려 제외 : 이것은 당신이 설명 된 사용 사례에 대해 원하는 것을 아마 때문에, 나는 같은 사용자 분석기를 추가하는 것이 좋습니다.

CREATE TABLE IF NOT EXISTS "test"."accounts" (
    "customer_name" STRING INDEX USING FULLTEXT WITH (
     analyzer = 'lowercase_keyword' 
    ), 
"customer_no" STRING, 
    PRIMARY KEY ("customer_no") 
); 

INSERT INTO "test"."accounts" (customer_name, customer_no) VALUES ('Walmart', 'C00001'), ('Wal-mart', 'C00002'), ('wal-mart', 'C00003'), ('wal- mart’, ’C00004'); 

이제 반환 '월마트', '월마트'와 '월마트'아래의 쿼리 :

그런 다음 일부 데이터를 새로운 생성 분석기로 테이블을 만들고 추가

select customer_name from test.accounts where match(customer_name, 'walmart') using best_fields with (fuzziness=1); 

fuzziness가 2 인 쿼리는 '월마트'를 추가로 반환합니다.