2016-10-07 9 views
0

Sensenet Odata Rest APIを使用して、空で空でないフィールドを照会したいとします。それらの文書には、「長さ」というフィルタ関数が記述されています。長さ操作でフィールドを照会しようとしましたが、エラーで失敗します。Sensenet length filter動作しません

これは、フィルタ、私が使用している

$filter=length(Name) eq 2 

センス/ネット6.5.4.9496

例外

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

ウィキリンクhttp://wiki.sensenet.com/OData_REST_API

答えて

2

操作が含まれていた長さでありますサプルのリストに間違って、私たちはそれについてお詫び申し上げます。 SenseNetはこれらのフィルタをLuceneクエリーにコンパイルします。はフィールドでを実行するLuceneでこのようなクエリーを作成することはできません。なぜなら彼らの

(それが動作するはずですのでsubstringofまたはSTARTSWITHのような残りの方法は、簡単にワイルドカード式にコンパイルすることができます)

残念ながら「空」の表現ものLuceneによってサポートされていません、ドキュメント/用語構造。だから、次の式はどちらか動作しません:

Description eq '' 

編集:回避策として、開発者はカスタムフィールドインデックスハンドラを作成することができます。あなたは空虚(例えば説明)をチェックしたいすべてのフィールドについては

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

この後は、次のような検索exressionsを定義することができるだろう:

+Type:File +IsDescriptionEmpty:true 

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

How to create a field indexhandler

+0

フィールドはsensenet内の空か空であることを知っている他の方法はありますか? –

+0

こんにちは、上記の答えに開発者向けの回避策を追加しました。カスタムフィールドインデックスハンドラを作成しています。 –

+0

こんにちは、Miklosありがとうございます。 –

関連する問題