2015-04-08 3 views
1

Я хочу использовать фильтр сценариев, чтобы получить все совпадения, что значение оценки равно значению maxScore. но это не работа.Фильтр скрипта ElasticSearch сравнивает два поля

{ 
    "query": { 
     "filtered": { 
      "filter": { 
       "script": { 
        "script": "doc['match.score'].value == doc['match.maxScore'].value" 
       } 
      } 
     } 
    } 
} 

У меня есть эта ошибка:

{ 
    "error": "SearchPhaseExecutionException[Failed to execute phase [query], all shards failed; shardFailures {[yk_PnKg9SOaf1d8acCsjvw][cobink_search][0]: SearchParseException[[cobink_search][0]: from[-1],size[-1]: Parse Failure [Failed to parse source [{"query":{"filtered":{"filter":{"script":{"script":"doc['match.score'].value == doc['match.maxScore'].value"}}}}}]]]; nested: ScriptException[dynamic scripting for [groovy] disabled]; }{[0jYKWZlyQiiVPHlzmoMjkA][cobink_search][1]: RemoteTransportException[[Hammer Harrison][inet[/192.168.1.100:9300]][indices:data/read/search[phase/query]]]; nested: SearchParseException[[cobink_search][1]: from[-1],size[-1]: Parse Failure [Failed to parse source [{"query":{"filtered":{"filter":{"script":{"script":"doc['match.score'].value == doc['match.maxScore'].value"}}}}}]]]; nested: ScriptException[dynamic scripting for [groovy] disabled]; }{[yk_PnKg9SOaf1d8acCsjvw][cobink_search][2]: SearchParseException[[cobink_search][2]: from[-1],size[-1]: Parse Failure [Failed to parse source [{"query":{"filtered":{"filter":{"script":{"script":"doc['match.score'].value == doc['match.maxScore'].value"}}}}}]]]; nested: ScriptException[dynamic scripting for [groovy] disabled]; }{[yk_PnKg9SOaf1d8acCsjvw][cobink_search][3]: SearchParseException[[cobink_search][3]: from[-1],size[-1]: Parse Failure [Failed to parse source [{"query":{"filtered":{"filter":{"script":{"script":"doc['match.score'].value == doc['match.maxScore'].value"}}}}}]]]; nested: ScriptException[dynamic scripting for [groovy] disabled]; }{[0jYKWZlyQiiVPHlzmoMjkA][cobink_search][4]: RemoteTransportException[[Hammer Harrison][inet[/192.168.1.100:9300]][indices:data/read/search[phase/query]]]; nested: SearchParseException[[cobink_search][4]: from[-1],size[-1]: Parse Failure [Failed to parse source [{"query":{"filtered":{"filter":{"script":{"script":"doc['match.score'].value == doc['match.maxScore'].value"}}}}}]]]; nested: ScriptException[dynamic scripting for [groovy] disabled]; }]", 
    "status": 400 
} 

Спасибо вам, ребята :)

+0

Прочитайте журналы, в которых говорится, что сценарий отключен. Вам нужно включить его из elasticsearch.yml –

+0

А также настроить язык сценариев на отличный. –

ответ

2

Dynamic скриптовый отключен в вашем случае. Добавьте динамическую скриптовую строку в файл elasticsearch.yml. Тогда ваш запрос должен работать. Но будьте осторожны, это может оставить дыру в вашем кластере Elasticsearch. Узнайте больше об этом here и here.

script.disable_dynamic: false 
+0

Спасибо вам :) это работа. Да, это не хорошо для обеспечения безопасности, так можем ли мы сделать? – kaneda

+0

Это проблема безопасности только при открытии вашего кластера Elasticsearch. Если нет, все должно быть хорошо. Пожалуйста, отметьте это как ответ, если он исправит вашу проблему. – bittusarkar

1

В версии 2.x и выше вы должны использовать

script.indexed: on 
script.inline: on 

в файле elasticsearch.yml, чтобы включить сценарии.

Смежные вопросы