簡體   English   中英

Arango 通配符查詢

[英]Arango wildcard query

我正在構建一個簡單的 arango 查詢,如果用戶輸入:“foo bar”(開始輸入 Foo Barber),查詢將返回結果。 我遇到的問題是從普通的單個空格分隔的字符串(即想象頂部的 LET str = "foo barber")到有多個通配符查詢,如下所示。

此外,對適用於此的其他查詢開放,例如 LIKE、PHRASE 或類似的查詢。

目標是當我們有一個像 'foo bar' 這樣的字符串時,返回 Foo Barber 和類似的搜索結果。

    FOR doc IN movies SEARCH PHRASE(doc.name,
[
   {WILDCARD: ["%foo%"]},
   {WILDCARD: ["%bar%"]}
], "text_en") RETURN doc

如果您想在搜索短語是black kni時找到Black Knight而不是Knight Black ,那么您可能應該避免對諸如text_en類的分析器進行標記。

相反,創建一個norm分析器來刪除變音符號並允許不區分大小寫的搜索。 在阿蘭戈什語中:

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

在所需字段的視圖定義中添加分析器(應該是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()與尾隨通配符% 第三個示例轉義用戶輸入的通配符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM