2012-02-16 44 views
1

組件我使用Apache的Solr的-3.5.0,我想做出這樣的:http://www.kaufda.de/BerlinSolr的建議者 「自動完成」 用PHP

(樂句建議)

我曾經建議者 - (靈活的「 http://css.dzone.com/news/solr-and-autocomplete-part-2

這是我solrconfig:

自動完成」組件,用於SOLR)是

喜歡這篇文章中的說明

<searchComponent name="suggest" class="solr.SpellCheckComponent"> 
<lst name="spellchecker"> 
    <str name="name">suggest</str> 
    <str name="classname">org.apache.solr.spelling.suggest.Suggester</str> 
    <str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookup</str> 
    <str name="field">name_autocomplete</str> 
</lst> 
</searchComponent> 

<requestHandler name="/suggest" class="org.apache.solr.handler.component.SearchHandler"> 
<lst name="defaults"> 
    <str name="spellcheck">true</str> 
    <str name="spellcheck.dictionary">suggest</str> 
    <str name="spellcheck.count">10</str> 
</lst> 
<arr name="components"> 
    <str>suggest</str> 
</arr> 
</requestHandler> 

Shema.xml

<fieldType class="solr.TextField" name="text_auto"> 
<analyzer> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
</fieldType> 

<field name="id" type="string" indexed="true" stored="true" multiValued="false" required="true"/> 
<field name="name" type="text" indexed="true" stored="true" multiValued="false" /> 
<field name="name_autocomplete" type="text_auto" indexed="true" stored="true" multiValued="false" /> 
<field name="description" type="text" indexed="true" stored="true" multiValued="false" /> 

<copyField source="name" dest="name_autocomplete" /> 

在我的PHP代碼:

$solr = $this->getSolr(); 
$response = NULL; 

if (!$solr) { 
return; 
} 

$params = array(); 
$params['spellcheck.build'] = 'true'; 
$params['spellcheck'] = 'true'; 
$params['qt'] = ''; 

$result = $solr->search('har', 0, 10, $params); 

結果是不建議的陣列。

我該如何使用Suggester和php?

感謝的提前幫助

乾杯

回答

0

你有沒有嘗試直接上Solr的做一個測試?這將是最好的,看看是否正確生成的值,然後你可以調試PHP代碼。

您可以通過訪問看到的值:

http://localhost:8983/solr/suggest?q=har&spellcheck=true&spellcheck.collate=true&spellcheck.build=true

,如果你不使用默認的配置,您可能需要更改端口。

+0

您好,感謝快速響應,它工作正常,但是當我在php中使用這個參數我無法得到這個結果 – ZendMind 2012-02-16 12:04:48

+0

嗨,我是這個'$ result = $ solr-> search('har',0,10,$ params);'錯了? solr建議者有另外一個參數嗎? – ZendMind 2012-02-17 11:14:03

+0

我不知道你用什麼庫來與solr進行交互。您需要確保它發送寫查詢。看看這個http://www.php.net/manual/en/solrquery.setquery.php – 2012-02-17 11:50:11

0

經過搜索和您的所有幫助,我找到了解決方案。

該參數是正確的。

的網址:http://localhost:8983/solr/suggest?q=har&spellcheck=true&spellcheck.collate=true&spellcheck.build=true 給了良好的效果

在我的PHP代碼我加了QT PARAM用 '/建議' 價值

新的代碼

$solr = $this->getSolr(); 
$response = NULL; 

if (!$solr) { 
return; 
} 

$params = array(); 
$params['spellcheck.build'] = 'true'; 
$params['spellcheck'] = 'true'; 
$params['qt'] = '/suggest'; 

$result = $solr->search('har', 0, 10, $params); 

感謝您的幫助,

乾杯

1

不使用拼寫檢查組件,您可以使用建議組件本身。

<searchComponent name="suggest" class="solr.SuggestComponent"> 
     <lst name="suggester"> 
    <str name="name">mySuggester</str> 
    <str name="lookupImpl">AnalyzingInfixLookupFactory</str>  <!-- org.apache.solr.spelling.suggest.fst --> 
    <str name="lookupImpl">FuzzyLookupFactory</str> 
    <str name="dictionaryImpl">DocumentDictionaryFactory</str>  <!-- org.apache.solr.spelling.suggest.HighFrequencyDictionaryFactory --> 
    <str name="field">name</str> 
    <str name="weightField">price</str> 
    <str name="suggestAnalyzerFieldType">text_general</str> 
    <int name="maxEdits">2</int> 
</lst> 
</searchComponent> 

<requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy"> 
<lst name="defaults"> 
<str name="df">text</str> 
    <str name="suggest">true</str> 
    <str name="suggest.count">10</str> 
    <str name="suggest.dictionary">mySuggester</str> 
</lst> 
<arr name="last-components"> 
    <str>suggest</str> 
</arr> 
</requestHandler> 

注:AnalyzingInfixLookupFactory允許你搜索綴爲好。假設您的搜索項目是壁球和用戶類型uash,將提供壁球作爲建議。

FuzzyLookupFactory即使在用戶發生拼寫錯誤時也可以提供建議。

這些是在solrconfig.xml文件中所做的更改,從php創建實例在本頁的其他答案中也有很好的解釋。所以我跳過那部分。希望這可以幫助。

編輯:您也將有寫一個建議服務Service.php這是非常相似的搜索服務,如果你想創建實例爲$result = $solr->**suggest**('har', 0, 10, $params);代替$result = $solr->**search**('har', 0, 10, $params);