2017-01-22 8 views
1

私はLevenshteinとImを使っていくつかの例を探しています。 私はすでにドキュメントを読んでいますが、実装方法はわかりません。 自分のアナライザーを構築しようとしましたが、使用するたびにクラッシュしました。ここでcrate.io FULLTEXT SEARCH fuzziness

私はfollwedドキュメントは次のとおりです。 https://crate.io/docs/reference/sql/fulltext.html

例テーブル:

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'); 

私の目標は、ウォルマートの検索やウォルマートを返すようになります。

答えて

2

この例で使用する標準の分析器では、検索語「wal-mart」(ハイフンのため)を2つのトークン「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); 

曖昧さが2の場合、クエリは「ウォルマート」を追加返すことになります。

関連する問題