我正在对包含多个可能出现名称的字段的文档进行名称查询。在许多情况下,每个文档节点的名称都是相同的。但是,在某些情况下,可能会有所不同。我想在最高匹配字段/节点上对我的查询进行评分。
因此,假设我对以下文档进行了索引。
{
"id" : 1,
{"object1": {"name" : 'Todd Hughes'}},
{"object2": {"name" : 'Todd Hughes'}},
{"object3": {"name" : 'Todd Hughes'}}
}
{
"id" : 2,
{"object1": {"name" : 'Todd Hunt'}},
{"object2": {"name" : 'Todd Hunt'}},
{"object3": {"name" : 'Ken Collins'}}
}
{
"id" : 3,
{"object1": {"name" : 'Todd Huddle'}},
{"object2": {"name" : 'Todd Huddle'}},
{"object3": {"name" : 'Todd Huddle'}}
}
我希望能够搜索“Todd Hunt”并首先获得“id”为 2 的第二条记录。我的问题是这些字段是用 ngrams 和其他文档索引的,#1 和 #3 部分匹配,并且每个对象节点/字段的总和被加在一起。所以这对我不起作用。
"bool" : {
"should" : [
{:field : {"object1.name" : "Todd Hunt"}},
{:field : {"object2.name" : "Todd Hunt"}},
{:field : {"object3.name" : "Todd Hunt"}}
],
"minimum_number_should_match" : 1
}
我已经尝试阅读自定义评分和排名,但我的脑袋只是在旋转。关于如何构建查询以使每个对象 1、对象 2 或对象 3 的最高排名成为最终分数的任何想法?