2014-07-24 21 views
1

在Twitter用戶的說明字段中搜索「follow back」,我已經使用以下映射對其進行索引。使用查詢字符串在特定字段上不工作的空間進行搜索

注:僅突出顯示某些映射。

1.

'analysis' => array(
     'analyzer' => array( 
       'myanalyzer' => array(
         "type" => "standard", 
         'stopwords' => '_none_', 
       ), 
     ) 
) 

2.

$mapping->setParam('index_analyzer', 'myanalyzer'); 
$mapping->setParam('search_analyzer', 'myanalyzer'); 

3.

'description' => array('type' => 'string', "index" => "not_analyzed"), 

4.

//search something 
$queryString = new \Elastica\Query\QueryString(); 
$queryString->setDefaultOperator("AND"); 
// $queryString->setFields(array("user.description")); 
$queryString->setQuery('follow back'); 

當硒拱形而setFields被註釋掉它給了我很多的結果一樣

IF YOU FOLLOW ILL FOLLOW BACK! :) 100% follow back! :)

Follow me i follow back :) instagram:juliemar25 i follow back

但之後取消註釋setFieldsdefaultOperator,則表明沒有結果。 和取消註釋setFieldsdefaultOperatorOR,它表明我只是結果有「跟隨」在描述而已。

Q1:爲什麼空白不能在setFields上工作,而是在使用_all?

使用匹配查詢

$matchQuery = new \Elastica\Query\Match(); 
$matchfield = "user.description"; 
$queryToMatch = "follow back"; 

$matchQuery->setFieldQuery($matchfield, $queryToMatch); 

同時也表明只有兩個結果只有在說明「跟着背」。但改變以匹配場_all這表明不少成果,它包含後描述字段

Q2「跟着背」。爲什麼會發生?我如何搜索空格分隔的單詞?

回答

1

這是因爲您已將「description」字段設置爲根據上述映射進行not_analyze分析。

這將導致在描述字段的有效載荷被索引爲是,並且當「描述」字段是一個精確搜索短語在這種情況下是「追隨回」

卸下發生匹配「指數」 => 「not_analyzed」應該修復它。

+0

在這種情況下,我必須使用精確匹配和使用MathcQuery的短語? 它的平均QueryString只適用於術語(分析)字段? –

+0

感謝@keety重新編制索引後,通過分析上述問題解決了上述問題。 但現在與mathQuery,如果我啓用matchType短語和搜索短語,它給了我 **致命錯誤:在F:\ wamp \ www \ zendProjects10 \ elasticsearch中帶有消息'1'的未捕獲異常'Elastica \ Exception \ PartialShardFailureException' \ ES \彈性曲線\傳輸\ HTTP協議。在線154上的php ** –

+0

另請問。如何搜索「follow bac」,因爲這裏是k的湖。它不匹配任何東西。我必須使用哪種方法?謝謝 –

相關問題