类似Google的自动补全的方法之一是将Solr 1.4中的带状疱疹和termvector组件结合起来。通过带状疱疹和termvector组件自动完成
首先,我们使用带状疱疹组件生成所有n元分布,然后使用termvector获得对用户词条序列的最接近的预测(基于文档频率)。
模式:
<fieldType name="shingle_text_fivegram" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="false" />
<filter class="solr.ShingleFilterFactory" maxShingleSize="5" outputUnigrams="false"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>
Solr的配置:
<searchcomponent name="termsComponent" class="org.apache.solr.handler.component.TermsComponent"/>
<requesthandler name="/terms" class="org.apache.solr.handler.component.SearchHandler">
<lst name="defaults">
<bool name="terms">true</bool>
<str name="terms.fl">shingleContent_fivegram</str>
</lst>
<arr name="components">
<str>termsComponent</str>
</arr>
</requesthandler>
通过以上的设置,我需要禁用词的任何地方砸的正克的边缘,并保持它们中正内-gram序列。
让我们从序列“印度和中国”说,我需要按以下顺序:
india
china
india and china
,并跳过休息。
它是否可与其他Solr组件/过滤器组合使用?
UPD:这里是(应该是可能的铁丝插入SOLR)在Lucene的4一种可能的解决方案:
“你不能做,只有在启动(第一令牌中删除停用词自定义阻滤波器( s)看到)还是输入结束(后面没有看到非停用词令牌)?它需要一些缓冲/状态保持(capture/restorteState),但看起来可行吗?迈克尔 - 麦坎德利斯
来自:http://blog.mikemccandless.com/2013/08/suggeststopfilter-carefully-removes.html
问题不是关于如何实现多字自动完成。这已经完成了。问题是,如何在搜索时放弃生成的n元组边界上的停用词。 – 2011-08-10 08:28:40