2016-04-26 162 views
0

是否可以搜索在另一個關鍵字或短語之後發生的關鍵字?ElasticSearch - 順序關鍵字/短語搜索

我一直在嘗試使用span_near與10000000斜率而明顯in_order =真實的,但它不喜歡的短語......否則它與關鍵字

最接近的解決方案,我能想出是如下:

  foreach($arrKeywords[$i] as $strKeyword) 
      { 
       $arrClauses[] = ['span_term' => ['transcript' => '"'.$strKeyword.'"']]; 
      } 

      $objQuery->query->bool->should[]->span_near = [ 
       'clauses' => $arrClauses, 
       'slop' => 100000000, 
       'in_order' => true 
      ]; 

回答

0

是否有任何特定的原因不使用以下內容?

"query": { 
    "match_phrase": { 
     "title": { 
      "query": "YOUR KEYWORD OR PHRASE + KEYWORD", 
      "slop": 1 # change this as you wish 
     } 
    } 
} 

雖然上面的查詢可以放鬆你想要的,那麼你就可以結合使用布爾查詢兩個查詢的語句條件;其中一個是以上,另一個是簡單的match_phrase與slop = 0搜索你的關鍵字/短語。

+0

自我回答:我猜,slop並不能保證訂單。這可能是您選擇跨度查詢的原因。 – Heval

+0

slop會在給定關鍵字前面找到潛在的其他關鍵字。我玩過query_string的短語/通配符,如:'「keyword1 * keyword2」' 我試圖找到唯一的關鍵字2事後關鍵字1 – Tyson