我在我的网站上实现了Lucenet.NET,用它来索引我的产品,这些产品是剧院表演,旅游和伦敦周边的景点.
我想实现一个"你的意思是?" 当用户拼错产品名称时考虑到整个产品标题的功能,而不仅仅是单个单词.例如,
如果用户键入:
Lodnon Eye
我想自动建议:
伦敦伦敦眼
我假设我必须让分析器将标题索引为好像它们是单个实体,以便SpellChecker可以与短语以及单个单词最接近匹配.
我该怎么做?
我刚刚在lucene.net中实现了一个短语autosuggest系统.
基本上,lucene的java版本在其中一个contrib文件夹中有一个shinglefilter,它将一个句子分解为所有可能的短语组合.不幸的是lucene.nets的贡献过滤器还没有完全存在,所以我们没有一个木瓦过滤器.
但是,只要版本相同,lucene.net就可以读取用java编写的lucene索引.所以我做的是以下内容:
使用spellcheck.IndexDictionary方法在lucene.net中创建了一个法术索引,如jake scotts链接的"你的意思"部分所示.请注意,只创建单个单词的拼写索引,而不是短语.
然后我创建了一个java应用程序,它使用木瓦过滤器来创建我正在搜索的文本的短语并将其保存在临时索引中.
然后我在dotnet中编写了另一个方法来打开这个临时索引,并将每个短语作为一行或文档添加到我已经包含单个单词的拼写索引中.诀窍是确保你添加的文件与其他拼写文件的形式相同,所以我在lucene.net项目中删除了拼写检查代码中使用的方法并对其进行了编辑.
一旦你完成了,你就可以调用spellcheck.suggestsimilar方法并传递一个拼写错误的短语,它会返回一个有效的建议.