我想用Levenshtein和Im寻找一些例子。 我已经阅读了文档,但我不知道如何实现它。 我尝试构建自己的Analyzer,但每次使用它时都会崩溃。
以下是我的文档: 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');
我的目标是搜索沃尔玛并回归沃尔玛。
答案 0 :(得分: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');
现在,下面给出的查询返回'Walmart','Wal-mart'和'wal-mart':
select customer_name from test.accounts where match(customer_name, 'walmart') using best_fields with (fuzziness=1);
如果模糊为2,则查询将另外返回'wal- mart'。