我正在使用apache solr搜索引擎为我的网站数据库建立索引。
我正在使用django+http://haystacksearch.org/
因此,假设我有一个文档,其中包含单词"Chicken“
当我搜索“鸡”时- solr可以找到这个文档
但是当我搜索"chick“的时候,它没有找到任何东西..
有没有办法解决这个问题?
发布于 2009-12-30 02:18:33
注意:以下解决方案是Solr 1.4 (及更高版本)特定于的!
为了获得更大的灵活性,我建议使用NGramTokenizerFactory对您的数据进行索引,以完成前后通配符搜索。如果只想搜索字符串开头或结尾的子字符串,请考虑使用EdgeNGramTokenizerFactory。
以下是文本字段类型的替换,它将满足您的需求:
<fieldType name="text" class="solr.TextField" >
<analyzer type="index">
<tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="15" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>发布于 2009-12-29 23:15:20
如果要查找所有以chick开头的单词,请搜索chick*。
发布于 2011-01-25 17:48:49
当我使用
<tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="15" />为了从Brian的答案中进行通配符搜索,Solr索引时间显著增加。超过20次!我在这里发现的通配符搜索问题的另一个决定:
http://www.lucidimagination.com/blog/2009/09/08/auto-suggest-from-popular-queries-using-edgengrams/
你只需要添加过滤器
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="25" />(默认令牌化器-FieldType索引块中的solr.WhitespaceTokenizerFactory )。对我来说,结果是相同的,但系统成本更低。
https://stackoverflow.com/questions/1974394
复制相似问题