Edu*_*rdo 12 java lucene full-text-search
我想在我的离线(android)应用程序中实现全文搜索,以搜索用户生成的笔记列表.
我希望它表现得像谷歌一样(因为大多数人已经习惯向谷歌查询)
我最初的要求是:
我如何配置全文搜索引擎以尽可能多地表现为Google?
(我最感兴趣的是开源,Java,尤其是Lucene)
Yuv*_*l F 15
我认为Lucene可以满足您的要求.您还应该考虑使用Solr,它具有类似的功能并且更容易设置.
我将使用Lucene分别讨论每个要求.我相信Solr有类似的机制.
- 快速:像Google或尽可能快,拥有100000个文档,每个文档200字.
对于Lucene和Solr来说,这是一个合理的索引大小,可以在每个查询的几十毫秒内进行检索.
- 搜索两个单词应该只返回包含两个单词的文档(不只是一个单词)(除非使用OR运算符)
您可以使用在Lucene中默认为MUST的BooleanQuery来实现.
可以通过自定义Lucene Analyzer来处理接下来的四个要求:
- 不区分大小写(又名:规范化):如果我有'Hello'这个词并且我搜索'hello'它应该匹配.
一个LowerCaseFilter可以用于此目的.
- 变音符号不敏感:如果我有'así'这个词,搜索'asi'应该匹配.在西班牙语中,许多人不正确地要么不提出变音标记,要么无法正确地放置它们.
这需要Unicode标准化,然后删除变音符号.您可以为此构建自定义分析器.
- 停止消除词:为了没有像'和'这样没有意义的无意义的词,''或'for'根本不应该被索引.
一的StopFilter在Lucene中去除停止词.
- 字典替换(又名:词干):类似的词应该被索引为一个.例如,"饥饿"和"饥饿"的实例应该用"饥饿"代替.
Lucene有许多Snowball Stemmers.其中一个可能是合适的.
- 短语搜索:如果我有"Hello world!"文本 搜索''world hello''不应该匹配它,但搜索''hello world''应匹配.
这由Lucene PhraseQuery专用查询涵盖.
如您所见,Lucene涵盖了所有必需的功能.为了得到更全面的图片,我建议使用Lucene in Action,Apache Lucene Wiki或The Lucid Imagination Site.
| 归档时间: |
|
| 查看次数: |
12508 次 |
| 最近记录: |