更新:我认为这个问题一般与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:\+\&\|\!\(\)\{\}\[\]\^\"\~\*\?\:\\'
奇怪。
任何人都可以对此有所了解,并且可能会建议一个能够匹配该标签的查询吗?
显然,任何人都不可能拥有包含所有特殊字符的属性,但我想更好地理解特殊字符应该如何转义。
谢谢!
答案 0 :(得分:14)
您需要对正则表达式使用lucene solr语法:http://lucene.apache.org/core/6_5_1/queryparser/org/apache/lucene/queryparser/classic/package-summary.html#Escaping_Special_Characters
答案 1 :(得分:5)