8

エラスティックサーチ バージョン: 0.90.2

私は custom_score クエリを機能させようとしています。

ClassCastException[org.elasticsearch.index.fielddata.ScriptDocValues$Longs cannot be cast to java.lang.Integer]

アイデアは、整数型のタイムスタンプを持つフィールドでドキュメントにインデックスを付け、クエリで現在のタイムスタンプパラメーターを渡して比較することでした。インデックス付き整数値が長くなったのはなぜですか?

再現するコマンドは次のとおりです。

curl -XPUT 'http://localhost:9200/test_longs_problem/'

curl -XPUT 'http://localhost:9200/test_longs_problem/albums/_mapping' -d '
{
    "albums" : {
        "properties" : {
            "date" : {"type" : "integer", "analyzed" : false}
        }
    }
}'

curl -XPUT 'http://localhost:9200/test_longs_problem/albums/1' -d '
{
  "date" : 1376823903
}'

curl -XGET 'http://localhost:9200/test_longs_problem/albums/_search?pretty' -d '{
    "query": {
        "custom_score": {
            "query": {
                "match_all": {}
            },
            "params": {
                "now": 1376823903
            },
            "script": "_score * 0.2 / (3.16 * pow(10, -9) * abs(now - doc[\"date\"]) + 0.05) + 1.0"
        }
    }
}'

スロー

{
  "error" : "SearchPhaseExecutionException[Failed to execute phase [query_fetch], total failure; shardFailures {[NSdeWzwNSIeLtGA1mtLTyA][test_longs_problem][0]: QueryPhaseExecutionException[[test_longs_problem][0]: query[filtered(custom score (ConstantScore(*:*),function=script[_score * 0.2 / (3.16 * pow(10, -9) * abs(now - doc[\"date\"]) + 0.05) + 1.0], params [{_source=org.elasticsearch.search.lookup.SourceLookup@7249d155, now=1376823903, _fields=org.elasticsearch.search.lookup.FieldsLookup@4c4e5e11, _doc=org.elasticsearch.search.lookup.DocLookup@2d01d53a, doc=org.elasticsearch.search.lookup.DocLookup@2d01d53a, _score=1.0}]))->cache(_type:albums)],from[0],size[10]: Query Failed [Failed to execute main query]]; nested: CompileException[[Error: uncomparable values <<1376823903>> and <<org.elasticsearch.index.fielddata.ScriptDocValues$Longs@41983ee7>>]\n[Near : {... _score * 0.2 / (3.16 * pow(10, ....}]\n             ^\n[Line: 1, Column: 1]]; nested: RuntimeException[uncomparable values <<1376823903>> and <<org.elasticsearch.index.fielddata.ScriptDocValues$Longs@41983ee7>>]; nested: ClassCastException[org.elasticsearch.index.fielddata.ScriptDocValues$Longs cannot be cast to java.lang.Integer]; }]",
  "status" : 500
}
4

1 に答える 1