5

これはばかげた質問かもしれませんが、Nest を使用して ElasticSearch で空の文字列をフィルタリングするにはどうすればよいですか。具体的には、次の結果を再現するにはどうすればよいですか。

curl http://localhost:9200/test/event/_search
{
    "filter" : { "term" : { "target" : "" }}
}

私はもう試した:

(f => f
    .Term("target", "")
);

ElasticSearch および Nest フィルタリングに従って機能しないものは、条件のないクエリのように扱われ、すべてを返しますが、.Strict() を追加すると DslException がスローされます。

(f => f
    .Strict().Term("target", "")
);

また、 .Missing() と .Exists() を試してみましたが、役に立ちませんでした。

参照用の私の _mapping の関連セクション:

{
    "event": {
        "dynamic": "false",
        "properties": {
            target": {
                "type": "string",
                "index": "not_analyzed",
                "store": true,
                "omit_norms": true,
                "index_options": "docs"
            }
        }
    }
}

任意のポインタをいただければ幸いです。

4

2 に答える 2

9

NEST とクエリの作成に関するドキュメントに記載されStrict()ているように、クエリの一部であることが判明した場合は、モードを切り替えて例外をトリガーできますconditionlessが、それが本当に必要な場合は、発見したように立ち往生していました。

.Verbatim()まったく同じように機能するコンストラクトをコミットしました.Strict()が、例外をスローする代わりに、クエリをそのまま受け取り、指定どおりにレンダリングします。

(f => f
    .Verbatim()
    .Term("target", "")
);

したがって、conditionlessクエリの書き換えを無効にし、クエリを指定どおりに文字どおりに挿入する必要があります。

これは、NESTの次のバージョンで実現します(現在のバージョンの0.12.0.0以降)

于 2013-12-11T22:55:02.120 に答える