我正在实现自定义本机SearchScript
,在查询执行时会产生一定的分数。给定术语x
,脚本应根据索引中的文档集计算相似性度量。应使用ScriptEngineService
实例编译和执行搜索脚本。然而,问题在于给定了使用映射端点明确定义的字段,在该段内找不到该字段。
@Override
public Function<Map<String,Object>,SearchScript> compile(String scriptName, String scriptSource, Map<String, String> params) {
if ("script".equals(scriptSource)) {
return p -> new SearchScript() {
final String field;
final String term;
{
field = p.get("field").toString();
term = p.get("term").toString();
}
@Override
public LeafSearchScript getLeafSearchScript(LeafReaderContext context) throws IOException {
PostingsEnum postings = context.reader().postings(new Term(field), PostingsEnum.PAYLOAD);
if (postings == null) {
// The field has not been found within the segment.
return () -> 0;
}
为什么没有找到包含给定字段的文档的任何提示?
答案 0 :(得分:0)
您尝试做的事情是不可能的:发布是按期限的,而在这里您试图为整个字段提供过帐。你应该context.reader().postings(new Term(field, term), PostingsEnum.PAYLOAD)
。