elasticsearch,Php,elasticsearch" /> elasticsearch,Php,elasticsearch" />

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

Php ElasticSearch在文档和动态嵌套文档中搜索,php,elasticsearch,Php,elasticsearch,我正在尝试搜索具有以下映射的文档: { "products":{ "properties":{ "product_id":{ "type":"string" }, "naam":{ "type":"string" }, "merk":{ "type":"string" }, "lijn":{ "type":"string" }, "sku

我正在尝试搜索具有以下映射的文档:

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

我不喜欢PHP,但我认为问题在于您使用的是
term
query 要进行搜索,并且您尚未在映射中指定
“索引”:“未分析”

有关详细信息,请参阅

您可以将查询从
term
更改为
match
match\u phrase
。 或者使用
“索引”更改映射:“未分析”
并重新索引数据


我希望这能有所帮助。

因为我需要一个解决方案,所以我决定创建一个单独的字符串字段,在其中分解“kenmerken”字段。现在这个很好用

我应该继续使用过滤器吗?只需更改术语/术语以匹配或匹配短语就会抛出错误。Parse Failure[未能解析sourceLooking here似乎嵌套文档中的字符串被复制到根文档的
\u all
字段中。因此,嵌套子句不能满足您的需要。