我在Solr有一些文档,其中包含有关书籍的信息。其中一个字段是作者,定义为:
<field name="author" type="text_general" indexed="true" stored="true"/>
这是doc的一个例子:
<doc>
<str name="id">db04</str>
<str name="isbn">0596529325</str>
<str name="author">Toby Segaran</str>
<str name="category">Computers/Programming/Information Retrieval/Machine Learning</str>
<arr name="title">
<str>Programming Collective Intelligence</str>
</arr>
<int name="yearpub">2007</int>
<date name="pubdate">2007-07-28T00:00:01Z</date>
</doc>
我尝试使用Solr 4.2创建自动完成系统。到目前为止它运作良好,如果我搜索to
,它会返回Toby Segaran
作为结果。
但是在我们的网站上,很多人搜索Segaran
,例如我想知道是否有可能在发生这种情况时以某种方式建议Toby Segaran
。
到目前为止,这是我使用的schema.xml:
<field name="author_suggest" type="text_auto" indexed="true" stored="true" multiValued="false"/>
<copyField source="author" dest="author_suggest"/>
<fieldType class="solr.TextField" name="text_auto">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
基本上,字段author
会被处理并复制到author_suggest
。
在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.tst.TSTLookupFactory</str>
<str name="field">author_suggest</str>
<float name="threshold">0.005</float>
<str name="buildOnCommit">true</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">6</str>
<str name="spellcheck.collate">false</str>
</lst>
<arr name="components">
<str>suggest</str>
</arr>
</requestHandler>
这样可以以某种方式使用来自Solr的建议者基于不完全位于短语开头的单词提出建议吗?
如果您需要更多信息,请告诉我们。
提前致谢