22

我正在使用 apache solr 搜索引擎来索引我的网站数据库..

我正在使用 django+ http://haystacksearch.org/

因此,假设我有包含“鸡”字样的文件

当我搜索“鸡”时 - solr 可以找到这个文档

但是当我搜索“小鸡”时 - 它什么也没找到..

有没有办法解决这个问题 ?

4

5 回答 5

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>
于 2009-12-29T18:18:32.980 回答
7

如果要查找所有以chick 开头的单词,请搜索chick*。

于 2009-12-29T15:15:19.840 回答
4

当我用过

<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)。对我来说,结果是相同的,但系统成本更低。

于 2011-01-25T09:48:48.927 回答
1

如果您在使用少量单词时遇到问题,另一种方法是使用 solr.SynonymFilterFactory

http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.SynonymFilterFactory

您只需要维护一个包含同义词的简单文本文件:

chick peep chicken
dawg hound dog
moggie puss kitten cat

复数应该用其他过滤器照顾自己。

于 2010-01-30T10:05:22.277 回答
0

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

于 2013-12-23T13:14:07.423 回答