2016-10-13 7 views
0

エンティティのテナントとIDからなる文字列である複合IDが "!"で区切られています。 (例えば、 "テナント!id"と言う)。Spring Data Solr:明示的コンポジットIDをルーティングキーとして使用する場合にドキュメントを取得する

私は、この複合IdをクエリメソッドfindOne(ID compositeId)に入力していますが、実行時にはQueryParserBaseクラスのBasePredicateProcessorが "!"を変換しています。 "\!"に移動し、Solrに送信されたルーティングキーを破棄します。そのため、Solrはcrudrepository.findOne()メソッドを使用してエンティティを取得できません。

「!」の変換を避ける方法はありますか? 「\!」、または同じことを達成する別の方法がありますか?

答えて

0

これはトータルの解答ではありませんが、考えられるアプローチについての示唆です。

具体的な内容はわかりませんが、入力クエリを何か他のもの(おそらくsolrconfig.xml)に解析するために使用するものを変更できます。しかし、私があなたがまだBasePredicateProcessorによって提供される他の "利益"を望んでいると仮定しているので、私はあなたが望むことを行う可能性のある "プロセッサ"次の可能性を参照してください...

代わりに、BasePredicateProcessorを拡張し、拡張クラス(おそらくsolrconfig.xml)を使用することもできます。変更されたコードは "!"単独で。この2番目のオプションはコーディングが必要です。

第3のオプションは、あなたがSolrに送信する前にクエリ文字列を変更するために使用できる「エスケープシーケンス」があるかどうかを確認することです。「エスケープエスケープ」のようなものです。それが可能かどうかは分かりません。しかしそれは調査する価値がある。第2のリンクから#3

http://lucene.472066.n3.nabble.com/How-do-you-query-for-a-string-containing-a-colon-td481672.html

https://lucene.apache.org/core/2_9_4/queryparsersyntax.html

ため

一部おそらく便利なリンク:

のLuceneクエリ構文の一部である特殊文字をエスケープをサポートしています。現在のリストの特殊文字は

    • & &ある|| ! (){} []^"〜*?:\

これらの文字は、文字の前に\を使用してエスケープする例は、(1 + 1)を検索する場合:2使用クエリ:

\(1 \ +1 \):2

関連する問題