首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Apache solr搜索单词的一部分

Apache solr搜索单词的一部分
EN

Stack Overflow用户
提问于 2009-12-29 20:28:51
回答 5查看 9.2K关注 0票数 22

我正在使用apache solr搜索引擎为我的网站数据库建立索引。

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

因此,假设我有一个文档,其中包含单词"Chicken“

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

但是当我搜索"chick“的时候,它没有找到任何东西..

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-12-30 02:18:33

注意:以下解决方案是Solr 1.4 (及更高版本)特定于的!

为了获得更大的灵活性,我建议使用NGramTokenizerFactory对您的数据进行索引,以完成前后通配符搜索。如果只想搜索字符串开头或结尾的子字符串,请考虑使用EdgeNGramTokenizerFactory

以下是文本字段类型的替换,它将满足您的需求:

代码语言:javascript
运行
复制
<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>
票数 18
EN

Stack Overflow用户

发布于 2009-12-29 23:15:20

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

票数 7
EN

Stack Overflow用户

发布于 2011-01-25 17:48:49

当我使用

代码语言:javascript
运行
复制
<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/

你只需要添加过滤器

代码语言:javascript
运行
复制
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="25" />

(默认令牌化器-FieldType索引块中的solr.WhitespaceTokenizerFactory )。对我来说,结果是相同的,但系统成本更低。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1974394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档