的Apache Solr实现搜索部分..我使用Apache Solr实现搜索引擎来索引我的网站数据库中的字
我使用Django + http://haystacksearch.org/
所以我们可以说我有Word文档“鸡“
当我搜索‘鸡’ - Solr的可以找到这个文件
但是当我搜索‘小鸡’ - 它没有找到任何东西..
有没有办法解决这个问题?
的Apache Solr实现搜索部分..我使用Apache Solr实现搜索引擎来索引我的网站数据库中的字
我使用Django + http://haystacksearch.org/
所以我们可以说我有Word文档“鸡“
当我搜索‘鸡’ - Solr的可以找到这个文件
但是当我搜索‘小鸡’ - 它没有找到任何东西..
有没有办法解决这个问题?
注意:以下解决方案是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>
如果您想查找所有以小鸡开头的单词,请搜索chick *。
我无法使用\ *小鸡\ *?可能吗? – 2012-03-29 11:27:25
@soundar,这是一个**糟糕的小鸡;)你不能有* infront的搜索关键字,Lucene不支持。 – 2014-06-21 17:55:10
一种不同的方法,如果您有一小部分的话麻烦,是使用Solr的。 SynonymFilterFactory
http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.SynonymFilterFactory
你只需要维护一个包含同义词简单的文本文件:
chick peep chicken
dawg hound dog
moggie puss kitten cat
复数应该照顾自己与其他过滤器。
当我用
<tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="15" />
,用于进行从Brian的回答通配符搜索,Solr的索引时间dramaticly增加。超过20次! 通配符搜索问题的其他决定,我发现在这里:
http://www.lucidimagination.com/blog/2009/09/08/auto-suggest-from-popular-queries-using-edgengrams/
你只需要添加滤镜
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="25" />
(默认标记生成器 - solr.WhitespaceTokenizerFactory中的FieldType的索引块)。对我来说,结果与系统成本更低一样。
我没有改变任何配置。我只是在前面和后面的searchString中使用星号:* chicke *(末尾没有空格 - >因为如果在开始和结尾使用*,SO格式化单词为斜体)
solr 1。5 - 这是开发版吗? (没有发布?) – 2009-12-30 13:22:52
有没有类似1.4的解决方案? – 2009-12-30 13:24:02
好赶上:我改正了答案反映1.4 – Brian 2009-12-30 15:58:26