匹配查询是否仅返回基于分数的结果?

时间:2015-09-30 00:15:54

标签: javascript elasticsearch

您好我有以下对象:

{
  type:'foo'
  users: [{id: MyId roles:['Admin','FooAdmin']}, 
            {id: MyId2 roles:['Admin']}]
}

我正在使用bool查询通过用户ID获取此对象。使用以下术语:

'term': {
         'users.id': 'myId'
        }

除非id中包含大写字母,否则效果很好。我搜索了一下,发现匹配查询作为替代:

{
 "query":
   {
    "match":
     {
      "users.userId":token._source.userId
     }
   }
}

到目前为止,它一直很适合我,因为它区分大小写。但最近我听说匹配查询只获得了最好的结果,这意味着只能获得得分最高的结果。这是真的?我冒险不通过匹配查询获得我想要的所有对象吗?

1 个答案:

答案 0 :(得分:1)

匹配查询采用查询字符串analyzes it,然后将分析的标记转换为OR查询。原因是它区分大小写是因为分析仪中有lowercase filter

所以像

这样的查询字符串

"brown dog"

会变成两个令牌和小写,类似

[brown] OR [dog]

这将根据这两个术语的相关性检索和排名结果。相关性公式本身就很复杂,但是您只需获得相关的所有结果。

参数minimum_should_match例外,如果设置了此参数,则可以控制上面OR查询中必须匹配的文档中的文档数量。但是,这默认为1,因此它不会对您产生影响。

如果你想要精确的字符串匹配但没有这种标记化业务的小写,你可以创建一个自定义分析器,将KeywordTokenizer(基本上没有标记器)和小写过滤器串在一起。