問題タブ [jcr-sql2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
jcr - CONTAINS が JCR-SQL2 で等しくないテキスト文字列を検出するのはなぜですか?
JCR-SQL2 クエリをCONTAINS
操作していると、条件にあった文字列とまったく同じ文字列を持たないノードが演算子によって検出されることに気付きました。
例
次のクエリ:
文字列を含むノードだけでなく、 のmy/search-expression
ような文字列を持つノードも検索しますmy/another/search/expression
。
クエリが提供された正確な文字列しか見つけられないのはなぜですか? 結果を絞り込むためにどのように変更できますか?
この質問は、知識を共有するために自分で回答することを目的としていますが、自由に独自の回答を追加したり、既存の回答を改善したりしてください。
lucene - JCR-SQL - 特殊文字をエスケープしない関数が含まれていますか?
次のクエリ文字列があります。
SELECT jcr:title, jcr:created, jcr:description FROM cq:PageContent WHERE jcr:path LIKE '/content/.../%' AND CONTAINS (., '*') ORDER BY date ASC
問題は、プロパティにアスタリスクがないにもかかわらず、クエリが指定されたパスからすべてのノードを返すことです。アスタリスク文字をエスケープしたかったのですが、結果は同じです。私はこのようなことを試しました:
SELECT jcr:title, jcr:created, jcr:description FROM cq:PageContent WHERE jcr:path LIKE '/content/.../%' AND CONTAINS (., '\*') ORDER BY date ASC
またはこのようなもの:
SELECT jcr:title, jcr:created, jcr:description FROM cq:PageContent WHERE jcr:path LIKE '/content/.../%' AND CONTAINS (., '\*\*\*\*\*\*\*\*\*\*\*') ORDER BY date ASC
これらすべてのクエリで、アスタリスク文字 (または 11 個) を含むプロパティがこれらのページにない場合でも、結果は同じです。
jcr:contains 関数のドキュメントには次のように書かれています。
searchexp リテラル インスタンス内で、一重引用符 ("'")、二重引用符 (""")、およびハイフン ("-") はバックスラッシュ ("\") でエスケープする必要があります。したがって、バックスラッシュ自体もエスケープする必要があり、最終的には二重バックスラッシュ (「\」) として。
のような他の文字*
は言及されていないので、エスケープ (?) しなくても機能するはずです。ここでそのような結果が得られる理由と、そのような文字を適切にエスケープする方法を理解してください。