我正在尝试使用以下映射搜索文档:
{
"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(boolean) 还是过滤器?或两者结合?
我什至靠近吗?
$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']
)
)
)
)
))
)
)
)
)
);
最佳答案
我不喜欢PHP,但我认为问题是您正在使用term
查询
搜索,并且您尚未在映射中指定"index": "not_analyzed"
。
请引用docs了解更多详情
您可以将查询从term
更改为match
或match_phrase
。
或使用"index": "not_analyzed"
更改映射并重新索引数据。
我希望这有帮助。
关于php - ElasticSearch在文档和动态嵌套文档中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33543091/