【问题标题】:ES keeps returning every documentES 不断返回每个文档
【发布时间】:2016-04-20 02:26:18
【问题描述】:

我最近继承了一个 ES 实例,并确保我在发布之前阅读了整本关于 ES 的完整书籍,但恐怕我什至无法获得简单的示例。

我在我们的暂存环境中有一个索引,它展示了无论如何都会返回每个文档的行为 - 我在我们的 QA 环境中有一个类似的索引,它的工作方式与我期望的一样。例如,我正在针对http://staging:9200/people_alias/_search?explain 运行以下查询:

{ "query" : 
   { "filtered" : 
       { "query" : { "match_all" : {} },
          "filter" : { "term" : { "_id" : "34414405382" } } } } }

我在这个暂存环境中注意到的是每个文档的分数都是 1,并且无论我指定什么值,它都会返回索引中的每个文档...使用 ?explain 我看到以下内容:

_explanation: {
value: 1
description: ConstantScore(*:*), product of:
details: [
{
value: 1, description: boost
}, { value: 1, description: queryNorm } ] }

在我的 QA 环境中,它只正确返回我观察到的一条记录 ?explain:

_explanation: {
value: 1
description: ConstantScore(cache(_uid:person#34414405382)), product of:
details: [ {
value: 1,
description: boost
}, {
value: 1,
description: queryNorm
}
]
}

两个索引上的映射几乎相同 - 唯一的区别是我删除了某些字段上的手动字段级提升值,因为我阅读不建议使用字段级提升来支持查询时提升,但这不应该影响对文档 ID 进行过滤的行为(对吗?)

我是否可以从解释输出中的差异中收集到任何线索,或者我应该发布索引映射?我应该考虑检查任何服务器级设置吗?我在 Staging 上使用什么查询并不重要,我可以在其他字段上使用匹配查询和精确匹配查找,Staging 只是不断返回分数为 1.0 的每个结果

我觉得我在我的暂存环境中做了一些非常明显且明显错误的事情。有人可以解释一下 ConstantScore、boost 和 queryNorm 的存在吗?我认为通过查看其他文献中的示例,我会看到诸如词频等内容。

编辑:我从 Elastic Search Head 插件发出查询

【问题讨论】:

标签: elasticsearch


【解决方案1】:

在您的 HEAD 插件中,您需要使用 POST 以便在有效负载中发送查询,否则 _search 端点将不受任何限制地命中。

在您的浏览器中,如果您打开开发者工具并查看网络选项卡,您会看到使用 GET 时负载中没有发送任何内容。

这是人们经常犯的常见错误。一些 HTTP 客户端(如 curl)确实使用 GET 发送有效负载,但其他客户端(如 /head/)不发送。如果您在发送有效负载时使用 GET 而不是 POST,Sense 会警告您,并且会自动强制使用 POST 而不是 GET。

总而言之,当您希望向服务器发送一些有效负载时,最好始终使用 POST,这样您就不必关心您正在使用的 HTTP 客户端的行为。

【讨论】:

  • *拍了拍额头 * 非常感谢,我知道这是小事
  • 不用担心,很高兴为您提供帮助!
猜你喜欢
  • 1970-01-01
  • 2014-05-07
  • 2017-06-04
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
  • 2020-11-26
  • 1970-01-01
相关资源
最近更新 更多