elasticsearch,Javascript,elasticsearch" /> elasticsearch,Javascript,elasticsearch" />

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

Javascript 匹配查询是否只返回基于分数的结果?,javascript,elasticsearch,Javascript,elasticsearch,您好,我有以下对象: { type:'foo' users: [{id: MyId roles:['Admin','FooAdmin']}, {id: MyId2 roles:['Admin']}] } 我使用bool查询通过用户id获取这些对象。使用以下术语: 'term': { 'users.id': 'myId' } 它运行良好,除非id中有大写字母。我搜索了一下,找到了匹配查询作为替代: { "query":

您好,我有以下对象:

{
  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
     }
   }
}

到目前为止,它对我很有效,因为它区分大小写。但最近我听说match查询只会得到“最佳结果”,也就是说,只会得到具有最佳分数的结果。这是真的吗?我冒着无法通过匹配查询获得所需的所有对象的风险?

匹配查询获取查询字符串,然后将分析的标记转换为OR查询。原因是它区分大小写,因为分析器中有一个

所以一个查询字符串

“棕色狗”

会变成两个标记并小写,类似于

[brown]或[dog]

它将根据这两个术语的相关性对结果进行检索和排序。相关性公式本身很复杂,但您将得到所有按相关性排序的结果

例外情况是参数minimum_should_match,如果设置该参数,则可以控制以上或查询中的多少个术语必须匹配才能使文档位于结果集中。但是,该值默认为1,因此在这里不会影响您


如果您想要精确的字符串匹配,但使用小写而不使用此标记化业务,则可以创建一个自定义分析器,将关键字标记器串在一起(基本上意味着没有标记器)和一个小写过滤器。

a您希望得到的对象具有完全相同的id
MyId
,即类似于
的SQL WHERE子句,其中MyId2='MyId'
?我想要的是与您描述的类似的东西,但没有小写。换句话说,我想要一个区分大小写的查询,并为我输入的确切字符串提供匹配项查询。这可以通过匹配查询完成吗?OR查询是否可以转换为AND查询?然后您只需将查询更改为not_ANALYSED即可完全禁用所有分析