Apache solr 搜索部分单词
我正在使用 apache solr 搜索引擎来索引我的网站数据库。
我正在使用 django+http://haystacksearch.org/< /a>
所以,假设我有一个包含单词“Chicken”的文档,
当我搜索“chicken”时 - solr 可以找到此文档
,但是当我搜索“chick”时 - 它找不到任何内容。
有没有办法解决这个问题?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
注意:以下解决方案是 Solr 1.4(及更高版本) 特定的!
为了获得更大的灵活性,我建议使用 NGramTokenizerFactory 进行完整的前后通配符搜索。如果您只想搜索字符串开头或结尾的子字符串,请考虑使用 EdgeNGramTokenizerFactory。
这是文本字段类型的替换,可以满足您的需求:
Note: The following solution is Solr 1.4 (and above) specific!
For more flexibility, I would recommend indexing your data with the NGramTokenizerFactory to do complete front and back wildcard searches. If you just want to search for substrings at the beginning or end of the string, consider using the EdgeNGramTokenizerFactory.
Here's a drop in replacement of the text field type which would accomodate your need:
如果您想查找所有以chick开头的单词,请搜索chick*。
If you want to find all words that start with chick, search for chick*.
当我使用
Brian 的答案进行通配符搜索时,Solr 索引时间急剧增加。都在20多次!
我在这里找到的通配符搜索问题的另一个决定:
http://www.lucidimagination.com/blog/2009/09/08/auto-suggest-from-popular-queries-using-edgengrams/
您只需添加过滤器
(默认分词器 - FieldType 索引块中的 solr.WhitespaceTokenizerFactory)。对我来说,结果是相同的,但系统成本更低。
When I've used
for making wildcard search from Brian's answer, Solr indexing time dramaticly increased. In more than 20 times!
The other decision of wildcard searching problem I found here:
http://www.lucidimagination.com/blog/2009/09/08/auto-suggest-from-popular-queries-using-edgengrams/
You need just add filter
(default tokenizer - solr.WhitespaceTokenizerFactory in index block of FieldType). For me result was the same with less system costs.
如果您在处理一小部分单词时遇到问题,另一种方法是使用 solr.SynonymFilterFactory
http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.SynonymFilterFactory
您只需维护一个包含同义词的简单文本文件:
复数应该与其他过滤器一起处理。
A different approach, if you are having trouble with a small set of words, would be to use the solr.SynonymFilterFactory
http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.SynonymFilterFactory
You just have to maintain a simple text file that contains synonyms:
Plurals should take care of themselves with other filters.
我没有更改任何配置。我只是在搜索字符串的前面和后面使用星号:*chicke *(末尾没有空格 - >这是因为如果您在开头和结尾使用 *,则将单词格式化为斜体)
I haven't changed any configuration. I am just using star in front and in the back of my searchString: *chicke * (without white space at the end -> it's because of SO formatting word as italic if you use * at the beginning and at the end)