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

标签 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(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更改为matchmatch_phrase
或使用"index": "not_analyzed"更改映射并重新索引数据。

我希望这有帮助。

关于php - ElasticSearch在文档和动态嵌套文档中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33543091/

相关文章:

javascript - datepicker - Highcharts Gauge Json

php - 这些使用 db_or() 的 Drupal SQL 查询有什么问题?

javascript - 表单数据未发布到 $.ajax url

PHP:非匿名函数的 use() 替代方法

ruby - 使用 Elasticsearch 处理超出内存限制的文档处理

elasticsearch - 将ElasticSearch导入Aurelia

spring - Spring Data ElasticSearch NullPointerException

javascript - 选择更改时更改 SQL 语句

elasticsearch - Elasticsearch :如何 'OR'两个不同的嵌套查询?

c# - 定义应使用多个节点创建哪个节点索引