0

Sensenet Odata Rest API を使用して、空であるフィールドと空でないフィールドを照会したいと考えています。彼らのドキュメントには、「長さ」と呼ばれるフィルター関数が記載されています。長さ操作でフィールドをクエリしようとしましたが、エラーで失敗します。

これは私が使用したフィルターです

$filter=length(Name) eq 2

センス/ネット 6.5.4.9496

例外

"code": "NotSpecified",
"exceptiontype": "SnNotSupportedException",
"message": {
"lang": "en-us",
"value": "Unknown method: length"
},

Wiki リンクhttp://wiki.sensenet.com/OData_REST_API

4

1 に答える 1

2

サポートされているメソッドのリストに長さ操作が誤って含まれていました。申し訳ありません。SenseNet はこれらのフィルターをLuceneクエリにコンパイルしますが、フィールドに対して操作を実行するようなクエリを Lucene で作成することはできません。

( substringofstartswithなどの残りのメソッドは、ワイルドカード式に簡単にコンパイルできるため、動作するはずです)

残念ながら、「空の」式も Lucene ではサポートされていません。これは、ドキュメント/用語の構造のためです。したがって、次の式も機能しません。

Description eq ''

編集: 回避策として、開発者はカスタムフィールド インデックス ハンドラを作成できます。

空であることを確認するすべてのフィールド (例: Description ) に対して、コンテンツ タイプの定義で技術的な隠し bool フィールド ( IsDescriptionEmpty ) を作成できます。作成して定義する必要があるのは、カスタム フィールド インデックス ハンドラー クラスだけです。あなたの場合、組み込みのbool フィールド インデックス ハンドラから継承し、ターゲット フィールド (この場合は Description) が空かどうかに基づいてブール インデックス値を返すことができます。

この後、次のような検索式を定義できます。

+Type:File +IsDescriptionEmpty:true

インデックス ハンドラの例については、以下の wiki 記事とソース コードを確認してください。

フィールド インデックス ハンドラの作成方法

于 2016-10-07T16:11:22.760 に答える