我正在构建一个简单的arango查询,如果用户输入:“foo bar”(开始键入Foo Barber),查询返回结果。我遇到的问题是从一个普通的单空格分隔字符串(即想象LET str =“foo barber”在顶部),到具有多个通配符查询,如下所示。
此外,开放其他查询,将工作的这一点,即喜欢,短语或类似的。
我们的目标是当我们有一个像'foo bar'这样的字符串时,返回Foo Barber和类似的搜索结果。
FOR doc IN movies SEARCH PHRASE(doc.name,
[
{WILDCARD: ["%foo%"]},
{WILDCARD: ["%bar%"]}
], "text_en") RETURN doc
1条答案
按热度按时间gudnpqoy1#
如果您希望查找
Black Knight
而不是Knight Black
(如果搜索短语是black kni
),那么您可能应该避免标记分析器(如text_en
)。相反,创建一个
norm
分析器,它可以删除音调符号并允许不区分大小写的搜索。在所需字段的视图定义中添加Analyzer(应该是
title
而不是name
,不是吗?)。然后,您应该能够运行如下查询:FOR doc IN movies SEARCH ANALYZER(STARTS_WITH(doc.title, TOKENS("Black Kni", "norm_en")[0]), "norm_en") RETURN doc
FOR doc IN movies SEARCH ANALYZER(LIKE(doc.title, TOKENS("Black Kni%", "norm_en")[0]), "norm_en") RETURN doc
FOR doc IN movies SEARCH ANALYZER(LIKE(doc.title, CONCAT(TOKENS(SUBSTITUTE("Black Kni", ["%", "_"], ["\\%", "\\_"]), "norm_en")[0], "%")), "norm_en") RETURN doc
搜索短语
Black Kni
被标准化为black kni
,然后用于前缀搜索,使用STARTS_WITH()
或LIKE()
并在后面加上通配符%
。第三个示例转义用户输入的通配符。