ArangoDB Arango通配符查询

gdrx4gfi  于 2022-12-09  发布在  Go
关注(0)|答案(1)|浏览(190)

我正在构建一个简单的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
gudnpqoy

gudnpqoy1#

如果您希望查找Black Knight而不是Knight Black(如果搜索短语是black kni),那么您可能应该避免标记分析器(如text_en)。
相反,创建一个norm分析器,它可以删除音调符号并允许不区分大小写的搜索。

var analyzers = require("@arangodb/analyzers");
analyzers.save("norm_en", "norm", {"locale": "en_US.utf-8", "accent": false, "case": "lower"}, []);

在所需字段的视图定义中添加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()并在后面加上通配符%。第三个示例转义用户输入的通配符。

相关问题