27

更新:认为这个问题通常与 solr 语法有关,而不是特别与 Chef 有关。因此,当我与 Chef 合作时,我认为任何与 Solr 合作的人也会体验到这一点……


我正在开发一个与 Chef 服务器的搜索 API 通信以查找特定节点的应用程序。

基于这个http://docs.opscode.com/essentials_search.html#special-characters,似乎需要转义一些特殊字符。

注意:我只关心完全匹配的模式,而不是通配符。我意识到其中一些字符是通配符的原因。

以下是撰写本文时的列表,从上面的 URL 复制而来:

+  -  &&  | |  !  ( )  { }  [ ]  ^  "  ~  *  ?  :  \

但是,当我尝试knife search使用这些字符执行各种命令时,我看到了不一致的行为。

对于以下示例,我设置了一个标记为的节点+&|!(){}[]^\"~*?:\\"

这些命令是在 bash shell 中的 Linux 机器上运行的:

$ knife search node 'tags:+&|!(){}[]^"~*?:\'
ERROR: knife search failed: invalid search query: 'tags:+&|!(){}[]^"~*?:\'

这符合预期,因为没有任何东西逃脱。\现在,正如文档所建议的那样,我用一个单一的东西来逃避一切:

$ knife search node 'tags:\+\&\|\!\(\)\{\}\[\]\^\"\~\*\?\:\\'
ERROR: knife search failed: invalid search query: 'tags:\+\&\|\!\(\)\{\}\[\]\^\"\~\*\?\:\\'

奇怪的。

任何人都可以对此有所了解,并可能提出一个能够匹配该标签的查询?

显然,任何人都不可能拥有包含所有这些特殊字符的属性,但我想更好地了解应该如何转义特殊字符。

谢谢!

4

2 回答 2

18

您需要对正则表达式使用 lucene solr 语法:http: //lucene.apache.org/core/6_5_1/queryparser/org/apache/lucene/queryparser/classic/package-summary.html#Escaping_Special_Characters

于 2014-02-20T22:08:08.993 回答