2016-04-26 161 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