我正在尝试使用以下映射搜索文档:
{
"products":{
"properties":{
"product_id":{
"type":"string"
},
"naam":{
"type":"string"
},
"merk":{
"type":"string"
},
"lijn":{
"type":"string"
},
"sku":{
"type":"string"
},
"omschrijving":{
"type":"string",
"boost":"0.5"
},
"groep":{
"type":"string"
},
"ean":{
"type":"string",
"boost":"2.0"
},
"kenmerken":{
"type":"nested",
"dynamic":true
},
"levertijd_min":{
"type":"string"
},
"levertijd_max":{
"type":"string"
}
}
}
}
我想搜索“naam”,“omschrijving”等,还要搜索嵌套文档“kenmerken”的动态映射 我创建了几个搜索查询,但它们似乎都没有。
我应该使用bool还是过滤器?或两者的组合?
我甚至关闭了吗?
$params['body'] = array(
'query' => array(
'filtered' => array(
'query' => array(
'match_all' => array()
),
'filter' => array(
'or' => array(
array('term' => array(
'naam' => $_GET['ZOEKTERMEN'],
)),
array('terms' => array(
'omschrijving' => explode(" ", $_GET['ZOEKTERMEN'])
)),
array('terms' => array(
'merk' => explode(" ", $_GET['ZOEKTERMEN'])
)),
array('term' => array(
'product_id' => $_GET['ZOEKTERMEN']
)),
array('nested' => array(
'path' => 'kenmerken',
'query' => array(
'filtered' => array(
'query' => array(
'match_all' => array()
),
'filter' => array(
'term' => array(
'_all' => $_GET['ZOEKTERMEN']
)
)
)
)
))
)
)
)
)
);
答案 0 :(得分:0)
我不是PHP,但我认为问题是你正在使用term
查询
要进行搜索,您尚未在地图中指定"index": "not_analyzed"
。
请参阅docs了解更多详情
您可以将查询从term
更改为match
或match_phrase
。
或者使用"index": "not_analyzed"
更改映射并重新索引数据。
我希望这会有所帮助。
答案 1 :(得分:0)
由于我需要一个解决方案,所以我决定创建一个单独的字符串字段,在其中我展开了“kenmerken”字段。现在这个很好。