27

更新:この質問は、特に Chef ではなく、一般的な solr 構文に関係していると思います。したがって、私は Chef でこの作業に遭遇しましたが、Solr で作業しているすべての人もこれを経験すると思います...


特定のノードを見つけるために Chef サーバーの検索 API と通信するアプリケーションに取り組んでいます。

このhttp://docs.opscode.com/essentials_search.html#special-charactersに基づくと、多くの特殊文字をエスケープする必要があるようです。

注:ワイルドカードではなく、完全一致パターンのみに関心があります。これらの文字の一部がワイルドカードである理由を理解しています。

上記の URL からコピーした、この記事の執筆時点でのリストは次のとおりです。

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

しかし、これらの文字でさまざまなコマンドを試すとknife search、一貫性のない動作が見られます。

次の例では、次のタグが付けられたノードをセットアップします。+&|!(){}[]^\"~*?:\\"

これらのコマンドは、bash シェルで 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 に答える
11

http://lucene.apache.org/solr/4_2_1/solr-solrj/org/apache/solr/client/solrj/util/ClientUtils.html#escapeQueryChars(java.lang.String)を見るのは良い考えかもしれません

于 2016-04-28T18:03:44.590 に答える