ES不断返回每个文档

时间:2016-01-14 16:45:05

标签: elasticsearch

我最近继承了一个ES实例并确保在发布之前阅读了一本关于ES封面到封面的整本书,但是我担心我甚至无法得到简单的例子。

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

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

我在这个临时环境中注意到的是每个文档的得分为1,无论我指定什么值,它都会在我的索引中返回每个文档...使用?解释我看到以下内容:

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

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

_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返回每个结果

我觉得我在Staging环境中做了一件非常明显且明显错误的事情。有人可以解释一下ConstantScore,boost和queryNorm的存在吗?我从其他文献中的例子中看到,我会看到诸如术语频率等的事情。

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

enter image description here

1 个答案:

答案 0 :(得分:10)

在您的HEAD插件中,您需要使用POST才能在有效负载中发送查询,否则_search端点会受到命中而不受任何限制。

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

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

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