2012-02-16 88 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);