2016-02-12 74 views
1

我在ElasticSearch中遇到了一些問題。我是新手,所以這很正常。 我的需求是在我的網站上配置搜索。我有一些視頻,並有一些過濾器來減少顯示的結果。 我有完全匹配的過濾器,但也有範圍過濾器。結合範圍並且必須在elasticsearch中過濾

所以我的問題是結合搜索關鍵字與這些過濾器,基於用戶正在尋找什麼。

我已經做出了迄今爲止將搜索到的關鍵字與範圍過濾器相結合,但如果有設置完全匹配過濾器,我不知道該怎麼做。

下面是參數現在怎麼去Elasticsearch:

[body] => Array 
     (
      [query] => Array 
       (
        [filtered] => Array 
         (
          [query] => Array 
           (
            [multi_match] => Array 
             (
              [query] => messi 
              [fields] => Array 
               (
                [0] => title 
                [1] => duration 
                [2] => id_category 
                [3] => id_tag 
               ) 

              [fuzziness] => 0.5 
             ) 

           ) 

          [filter] => Array 
           (
            [range] => Array 
             (
              [duration] => Array 
               (
                [gte] => 0 
                [lte] => 300 
               ) 

             ) 

           ) 

         ) 

       ) 

     ) 

究竟應該如何樣子,如果我有過濾器,只顯示我的視頻,匹配0到300秒之間的關鍵字「梅西」與時間在某些類別?

請教!

回答

0

看看Bool Query。我建議你把你的多重匹配查詢放在必須的部分,並將你的過濾器移到(非常明顯的)過濾器部分。因此,ES會根據多重匹配計算相關性分數,但將其與篩選器的緩存性結合起來。一個簡短的例子:

<?php 

$query = [ 
    'body' => [ 
     'query' => [ 
      'bool' => [ 
       'must' => [ 
        [ 
         'multi_match' => [] 
        ], 
        ... 
       ], 
       'filter' => [ 
        [ 
         'range' => [] 
        ], 
        ... 
       ] 
      ] 
     ] 
    ] 
]; 
相關問題