2011-03-11 78 views
0

这是通过NHibernate.Search命名空间与Lucene一起使用来使用Lucene的问题。如何使用索引配置tolkenizers并使用Lucene和Nhibernate进行搜索

我索引的一个标题在指数:实习医生格蕾

Title : "Grey's Anatomy" 

通过使用卢克,我看到那个标题是越来越切分分为:

Title: anatomy 
Title: grey 

现在,我得到一个结果,如果我搜索:

"grey" or "grey's" 

但是,如果我搜索“灰色”那么我什么也得不到。

我想“灰色”返回结果。我想这可能是任何带有撇号的单词的问题。

因此,这里有一些问题:

  1. 我是正确的思维我既可以通过指数时改变的东西解决这个问题(所以,改变tolkenizer ??)或者改变它查询时间(查询解析器?)
  2. 如果有解决方案,有人可以提供一个小代码示例吗?

感谢

回答

1

如果您使用Lucene的经典词汇搜索,然后灰色它最有可能不显示的结果,除非你是一个不错的标记化工作提供省时,所以从我看到它,你有2个选择或第三个组合他们:

  1. 使用Stemmer索引数据和查询。 Stemmers速度很快,您总是可以找到Porter's stemmer somewhere in Google的实现。问题是当你寻找不同的语言。
  2. 使用模糊查询。使用模糊查询,您可以设置要从搜索词中“离开”的编辑距离。问题在于,因为使用版本距离(即Lehvenstein)的两个单词“接近”并不意味着它们是相同的,但是应该通过将编辑距离设置为2来解决Gray和Gray和Grays的问题

我认为你将能够找到Porter Stemmer的一个体面的实施,这是很好的权利here

希望我能帮上忙!

+0

+1哇,伟大的答案大卫!谢谢!实际上我已经使用了距离为0.5的模糊查询(只是一个随机选择的值),所以也许增加这将有所帮助。至于Stemmer ...在代码中我会实现这一点?再次感谢 – andy 2011-03-13 22:32:33

+0

非常感谢评论,我更新了答案以添加一些额外的链接。 – 2011-03-14 06:38:53