ElasticSearch在文档和动态嵌套文档中搜索

时间:2015-11-05 11:11:44

标签: php elasticsearch

我正在尝试使用以下映射搜索文档:

 {
"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']
                                        )
                                    )
                                )
                            )
                        ))
                    )
                )
            )
        )
    );

2 个答案:

答案 0 :(得分:0)

我不是PHP,但我认为问题是你正在使用term查询 要进行搜索,您尚未在地图中指定"index": "not_analyzed"

请参阅docs了解更多详情

您可以将查询从term更改为matchmatch_phrase。 或者使用"index": "not_analyzed"更改映射并重新索引数据。

我希望这会有所帮助。

答案 1 :(得分:0)

由于我需要一个解决方案,所以我决定创建一个单独的字符串字段,在其中我展开了“kenmerken”字段。现在这个很好