我在Lucene Index有一个公司领域。 其中一个索引的公司名称是:穆迪的
当用户键入以下任意关键字时,我希望该公司出现在搜索结果中。 1.Moo 2.Mood 3.Moodys 4.Moody的
我应该如何在Lucene中存储此索引以及我应该使用什么类型的Lucene Query来获取此行为?
感谢。
答案 0 :(得分:9)
根据您的澄清,我想将您的问题分成两部分,然后依次回答:
1相对简单 - 使用StandardToeknizer创建一个将撇号和s与前一个单词组合在一起的标记,然后使用StandardFilter来删除撇号和s。这将把穆迪转变为穆迪。 StandardAnalyzer执行此操作以及更多(小写和停止删除单词),这可能比您需要的更多。使用词干分析器应该同时使用 Moodys 和 Moody 。请尝试SnowBallFilter。
2更难:Alan提到的Lucene PrefixQuery只有在公司名称是字段中的第一个单词时才会起作用。你需要类似this question about auto-complete in Lucene的答案。
答案 1 :(得分:1)
StandardAnalyser应该适用于3和4,但不适用于1和2。
如果不编写自己的(复杂的)文本分析器,我会考虑您希望如何搜索公司名称。例如,基本的lucene搜索语法意味着如果使用通配符搜索,您可以找到“Moody's”:“Moo *”和“Mood *”。因此,您可能需要考虑在提交到lucene之前在搜索词中附加“*”,但是如果用户不知道这个通配符的添加,这可能会引起一些混淆。