【发布时间】:2013-09-07 05:40:47
【问题描述】:
以下排序脚本曾经在 0.2 中工作,但现在在 0.9 中失败:
{
"_script": {
"script": "org.elasticsearch.common.Digest.md5Hex(doc['myId'].value + 12345)",
"type": "string",
"order": "asc"
}
}
我收到的错误是:
PropertyAccessException[[Error: unresolvable property or identifier: org]
我看到一些帖子建议创建一个自定义分数查询来完成这项工作,所以需要一些额外的信息。我已经在使用自定义分数查询,这种排序是分数匹配时的二级排序,可以(并且应该)定期发生。上例中的常数基于执行搜索的人,因此每个搜索的人都会得到随机但一致的排序,我们并不总是在顶部向每个人显示相同的结果。
我找不到任何关于为什么会发生这种情况以及如何在保留相同排序功能的同时修复它的信息。任何帮助或指出我新的方向将不胜感激。
【问题讨论】:
-
看起来您必须创建和注册自定义 java 脚本并在查询中引用它(还提供“lang”:“native”参数)。我绝不是 Java 专家,但有一个关于如何创建此类脚本的不错的教程:github.com/imotov/elasticsearch-native-script-example 最后查看随机排序脚本,因为它似乎是您需要的。
-
感觉任何非MVEL脚本都必须作为插件实现;非 MVEL 脚本不允许使用内联脚本。谁能确认一下?
-
我也试过 js - 你仍然需要安装一个插件来启用 js 支持但是你可以做内联表达式:“sort”:{“_script”:{“script”:“doc [” date'].value * factor + 'anyvaluehere'", "type": "string", "params": { "factor": 1.1 }, "order": "asc", "lang": "js" } }
-
@NickLarsen 内联脚本支持除 java 之外的所有语言,您需要为此编写 Java 代码并在 es 类路径中提供编译后的版本。唯一的问题是,对于其他语言,您需要安装适当的语言插件。
标签: elasticsearch