2013-03-18 85 views
1

使用Elastica - Elasticsearch PHP Client。有很多字段,但我想在「Screen_name」字段中搜索。我必須爲此做些什麼。我用了術語但沒有成功。結果爲空陣列
以下是代碼。通過使用elastica給出空結果的術語搜索

// Load index (database) 
$elasticaIndex = $elasticaClient->getIndex('twitter_json'); 

//Load type (table) 
$elasticaType = $elasticaIndex->getType('tweet_json'); 


$elasticaFilterScreenName = new \Elastica\Filter\Term();  
$elasticaFilterScreenName->setTerm('screen_name', 'sohail'); 

//Search on the index. 
$elasticaResultSet = $elasticaIndex->search($elasticaFilterScreenName); 

var_dump($elasticaResultSet); exit; 
$elasticaResults = $elasticaResultSet->getResults(); 
$totalResults  = $elasticaResultSet->getTotalHits(); 

回答

0

很難不知道你的映射說,但有一個很好的機會,文檔屬性「SCREEN_NAME」不含有「蘇海爾」。

嘗試使用匹配查詢或Query_String。

「Term」在ElasticSearch中有特殊含義。 Term是索引的基本原子單位。術語是在文本通過分析器運行後生成的。如果「screen_name」具有與索引相關聯的分析器,則「索哈爾」在被保存到索引中之前以某種容量被修改。

+0

感謝您的回覆。我添加一個數據數組,然後elasticsearch自動映射它。我只想在** screen_name **字段中搜索。與術語或任何其他方法。 – 2013-03-18 10:40:27

+0

如果您沒有指定分析儀,ES將自動使用[標準分析儀](http://www.elasticsearch.org/guide/reference/index-modules/analysis/standard-analyzer.html)。嘗試使用匹配查詢,這可能會爲你工作。 – Zach 2013-03-18 11:52:28

+0

現在我正在嘗試這個,但再次是空的結果。 '$ elasticaQueryMatch \t = new Elastica \ Query \ Match(); $ elasticaQueryMatch-> setField('screen_name','sohail'); //在索引上搜索。 $ elasticaResultSet \t = $ elasticaIndex->​​ search($ elasticaQueryMatch); var_dump($ elasticaResultSet);退出;' – 2013-03-18 12:39:08