ElasticSearch:如何在子组中查询?
问题描述:
我有存储用户知道的技巧文件:ElasticSearch:如何在子组中查询?
{
"size": 1000,
"query": {
"function_score": {
"query": {
"bool": {
"should": [
{
"query_string": {
"query": "Objective-C",
"default_field": "user.skill.name"
}
},
{
"range": {
"user.skill.weight_relative": {
"gte": 1
}
}
},
{
"range": {
"user.skill.weight_absolute": {
"gte": 1
}
}
},
...
问题我遇到的是ElasticSearch将返回用户,例如,skill.name == Objective-C
但权重为0的相对和绝对的,也用户的分数超过1,但skill.name是完全不同的东西。
有没有什么办法可以告诉弹性,我不希望这些搜索是“本地”范围的?我不知道这个场景的名字。对不起,如果我没有正确地调用它。
我正在运行的查询还具有自定义_score功能,该功能可为具有第三个指标(不包括与其无关的指标)的用户提供更高的分数。可能是因为这种自定义分数功能?可能会给“错误”的用户一个更高的分数,因为第三个指标高于具有所需技能和水平的用户?
谢谢。
答
找到了我一直在寻找:
http://www.elasticsearch.org/blog/managing-relations-inside-elasticsearch/
不得不从object
更改元素的类型nested
和执行nested
搜索。链接中的示例显示了我正在经历的事情。
我完全不理解你的问题,但它看起来像你想'必须'的条款,而不是'应该' – 2015-02-09 17:28:46
请记住'应该'条款可以被认为是一个布尔'OR'而不是'AND',这更多是'必须'实现的) - 我认为默认情况下,任何满足这些条件之一(并且可以是任何一个)的文档都会匹配,尽管这个要求可以通过'minimum_should_match'明确指定。 http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html – rchang 2015-02-09 20:09:18
嗨,大家好,谢谢你的回复。它不能成为'必须',因为'应该'条件只是为了增加分数。设想一个用户在技能上的重量为0,它仍然应该出现,但较低。 – Topikito 2015-02-10 09:29:17