我正在创建像google这样的建议。现在,当我写“do”时,solr返回“dog”,“doll”,它在schema字段上只返回一个单词。 我想要的是如果它像“小狗等等”,“狗店”等那样返回整个领域,那将是不错的。 这是我的schema.xml
<field name = "companyDisplayName" type = "text_auto" multiValued="false" indexed = "true" stored = "false" />
和我的架构字段类型配置:
<fieldType name="text_auto" class="solr.TextField" positionIncrementGap="100" ><analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" maxGramSize="30" minGramSize="1"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
这是我的solrconfig.xml
<searchComponent class="solr.SpellCheckComponent" name="suggest">
<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.fst.AnalyzingInfixLookupFactory</str>
<str name="buildOnCommit">true</str>
<str name="suggestAnalyzerFieldType">text_auto</str>
<str name="field">companyDisplayName</str>
</lst>
</searchComponent>
<requestHandler class="org.apache.solr.handler.component.SearchHandler" name="/suggest">
<lst name="defaults">
<str name="spellcheck">true</str>
<str name="spellcheck.dictionary">suggest</str>
<str name="spellcheck.onlyMorePopular">true</str>
<str name="spellcheck.count">5</str>
<str name="spellcheck.collate">false</str>
<str name="echoParams">explicit</str>
<str name="defType">edismax</str>
<str name="rows">10</str>
<str name="fl">companyDisplayName</str>
<str name="qf">companyDisplayName^30</str>
<str name="pf">companyDisplayName^50.0</str>
<str name="group">true</str>
<str name="group.field">companyDisplayName</str>
<str name="sort">score desc</str>
<str name="group.sort">score desc</str>
</lst>
<arr name="components">
<str>suggest</str>
</arr>
和我的查询:
http://localhost:8983/solr/vw_search_company_with_buildings/suggest?spellcheck.q=hunn
答案 0 :(得分:0)
您的建议者需要进行多项更改才能开始工作。
对于您要在建议中使用的字段,请使用 stored = true 。我建议您使用
copyField
标记在其他字段中复制字段。您无需索引复制的字段。您可以替换text_general
中的schema.xml
定义。它与默认版本相同,但版本更简单。
<field name = "suggest_field" type = "text_general" multiValued="false" indexed = "false" stored = "true" />
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
现在对建议者
searchComponent
和requestHandler
使用以下配置。此配置使用solr.SuggestComponent
而不是solr.SpellCheckComponent
。对于AnalyzingInfixLookupFactory
,默认突出显示为true
,此处为false
。我添加了<str name="dictionaryImpl">DocumentDictionaryFactory</str>
来获取建议者中的完整属性值。
<searchComponent name="suggest" class="solr.SuggestComponent">
<lst name="suggester">
<str name="name">suggest</str>
<str name="lookupImpl">AnalyzingInfixLookupFactory</str>
<str name="dictionaryImpl">DocumentDictionaryFactory</str>
<str name="field">suggest_field</str>
<str name="suggestAnalyzerFieldType">text_general</str>
<str name="buildOnCommit">true</str>
<str name="highlight">false</str>
</lst>
</searchComponent>
<requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<str name="suggest">true</str>
<str name="suggest.dictionary">suggest</str>
<str name="suggest.count">10</str>
<str name="suggest.onlyMorePopular">true</str>
<str name="suggest.count">5</str>
<str name="suggest.collate">false</str>
<str name="echoParams">explicit</str>
<str name="defType">edismax</str>
<str name="rows">10</str>
<str name="fl">suggest_field</str>
<str name="qf">suggest_field^30</str>
<str name="pf">suggest_field^50.0</str>
<str name="group">true</str>
<str name="group.field">suggest_field</str>
<str name="sort">score desc</str>
<str name="group.sort">score desc</str>
</lst>
<arr name="components">
<str>suggest</str>
</arr>
</requestHandler>
使用以下命令发出建议请求。它在url中包含
suggest.build=true
,这意味着每次发出请求时它都会构建字典。您可以将其删除以用于生产目的。
http://localhost:8983/solr/vw_search_company_with_buildings/suggest?suggest.build=true&suggest.q=do
PS: AnalyzingInfixLookupFactory
存在问题,它会在您第二次重新加载时锁定建议词典目录。您可以使用indexPath
来解决问题。