弹性搜索/Elasica php-或对包含NULL的字段的查询不起作用
如何仅查询location\u id为null或locations.country\u id位于给定id集中的文档?这是当前的查询,但它根本没有返回任何信息。。。如果我从查询中删除location_id,它将工作并返回至少与国家id匹配的文档弹性搜索/Elasica php-或对包含NULL的字段的查询不起作用,php,
elasticsearch,elastica,Php,
elasticsearch,Elastica,如何仅查询location\u id为null或locations.country\u id位于给定id集中的文档?这是当前的查询,但它根本没有返回任何信息。。。如果我从查询中删除location_id,它将工作并返回至少与国家id匹配的文档 { "bool":{ "must":[ { "bool":{ "must_not":[ {
{
"bool":{
"must":[
{
"bool":{
"must_not":[
{
"exists":{
"field":"location_id"
}
}
],
"must":[
{
"terms":{
"locations.country_id":[
18
]
}
}
]
}
}
]
}
}
在elasticsearch中,其行为必须和应该与或类似 您的查询转换为locationId为null,locations.country_id位于[set of id]中。 “必须”需要替换为“应该” 查询:
在elasticsearch中,其行为必须和应该与或类似 您的查询转换为locationId为null,locations.country_id位于[set of id]中。 “必须”需要替换为“应该” 查询:
无论出于何种原因,这都会导致获取所有类型的文档,不再由国家过滤。这是我做出您建议的更改后的整个查询。@burzum请在“应”之后添加“最小值应匹配”:1。当必须使用时,不过滤任何文档,它只影响评分。添加“minimum_should_match”:1将强制文档与should@burzum我的shoul子句和你的quey中的shoul子句是不同的。在我的shoul子句中有两个独立的子句[{bool},{term}],在你的查询中它已经组合在一起[{bool:{mustnot,term}]对不起,要再试一次,这个巨大的嵌套json让人读起来很痛苦。这导致无论出于何种原因,都会得到各种各样的文档,不再由国家过滤。这是我做出您建议的更改后的整个查询。@burzum请在“应”之后添加“最小值应匹配”:1。当必须使用时,不过滤任何文档,它只影响评分。添加“minimum_should_match”:1将强制文档与should@burzum我的shoul子句和你的quey中的shoul子句是不同的。在我的shoul子句中有两个独立的子句[{bool},{term}],在你的查询中它已经组合在一起[{bool:{mustnot,term}]对不起,要再试一次,这种巨大的嵌套json让人读起来很痛苦。
{
"query": {
"bool": {
"should": [
{
"bool": {
"must_not": [
{
"exists": {
"field": "location_id"
}
}
]
}
},
{
"terms": {
"locations.country_id": [
18
]
}
}
],
"minimum_should_match": 1
}
}
}