1

我想使用 Levenshtein,我正在寻找一些例子。我已经阅读了文档,但我不知道如何实现它。我尝试构建自己的分析器,但每次使用它都会崩溃。

这是我遵循的文档: 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');

我的目标是搜索沃尔玛并返回沃尔玛。

4

1 回答 1

3

您在本示例中使用的标准分析器会将搜索词“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');

现在下面给出的查询返回 'Walmart'、'Wal-mart' 和 'wal-mart':

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

模糊度为 2 时,查询将额外返回“沃尔玛”。

于 2017-03-27T12:34:02.873 回答