2015-11-05 183 views
2

我想在文檔中使用下列映射搜索: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」的映射 我創建了幾個搜索查詢,但它們都不起作用。

我應該使用布爾還是過濾器?或兩者的組合?

我是否關閉?

$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

看這裏看起來好像嵌套文檔中的字符串被複制到* root *文檔的'_all'字段。所以你的嵌套子句沒有做你需要的。 https://www.elastic.co/guide/en/elasticsearch/reference/1.4/mapping-nested-type.html –

回答

0

因爲我需要一個解決方案,我決定創建一個單獨的字符串字段,在此字段中我爆炸了「kenmerken」字段。此工作罰款現在。

0

我不是到PHP,但我認爲這個問題是您正在使用term查詢 搜索和你沒有指定在映射"index": "not_analyzed"

請參考docs更多細節

您可以查詢更改從termmatchmatch_phrase。 或更改爲與"index": "not_analyzed"的映射並重新索引數據。

我希望這會有所幫助。

+0

我應該繼續使用過濾器嗎?只是改變術語/術語匹配或match_phrase會引發錯誤。解析失敗[解析源失敗 – Hawiak