我最近继承了一个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插件发出查询
答案 0 :(得分:10)
在您的HEAD插件中,您需要使用POST
才能在有效负载中发送查询,否则_search
端点会受到命中而不受任何限制。
在浏览器中,如果您打开开发人员工具并查看网络选项卡,则会在使用GET时看到有效负载中没有发送任何内容。
这是人们经常犯的常见错误。一些HTTP客户端(如curl)确实使用GET发送有效负载,但其他客户端(如/head/
)不发送。如果您在发送有效负载时使用GET而不是POST,Sense将警告您,并将自动强制POST而不是GET。
总而言之,每当您希望向服务器发送一些有效负载时,最好总是使用POST,这样您就不必关心HTTP客户端的行为了。 ;重新使用。