2009-12-29 25 views

回答

18

注意:以下解决方案是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> 
+0

solr 1。5 - 这是开发版吗? (没有发布?) – 2009-12-30 13:22:52

+1

有没有类似1.4的解决方案? – 2009-12-30 13:24:02

+0

好赶上:我改正了答案反映1.4 – Brian 2009-12-30 15:58:26

7

如果您想查找所有以小鸡开头的单词,请搜索chick *。

+0

我无法使用\ *小鸡\ *?可能吗? – 2012-03-29 11:27:25

+0

@soundar,这是一个**糟糕的小鸡;)你不能有* infront的搜索关键字,Lucene不支持。 – 2014-06-21 17:55:10

4

当我用

<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的索引块)。对我来说,结果与系统成本更低一样。

0

我没有改变任何配置。我只是在前面和后面的searchString中使用星号:* chicke *(末尾没有空格 - >因为如果在开始和结尾使用*,SO格式化单词为斜体)