我最近刚开始使用Lucene(具体Lucene.Net)工作,并已成功地创建了几个indicies,并与其中的任何没有问题。 此前已经与Endeca的工作,我发现,Lucene是重量轻,功能强大,并具有更低的学习曲线(主要原因是一个简洁的API)。
但是,我有我有周围环绕我的头一个问题的具体指标/查询情况。 我所拥有的是一个人的目录。 人们可以在这个应用程序进行搜索,以返回既精确和近似匹配的目标。 眼下,在指数I串联的“名字”和“姓氏”成所谓的“全名”单场,将两者之间的空间。 所以姓:乔恩与名字:史密斯得到真实姓名:乔恩·史密斯。 我预计中间名和后缀可能的可能性,但这不是目前重要。
我想这样做的名字模糊搜索的等价物,所以有人搜索“约翰·史密斯”仍然会回到“乔恩·史密斯”。 我曾想过一个multisearch,然而,这变得更复杂,如果他的名字实际上是“乔恩·卡门”或“乔恩·保罗·卡门”。 我没有在什么类型的用户在划定的姓或名段。
唯一的想法,我有是,我可以用,不会被丢弃的字符替换级联值空间。 如果我这样做,当我建立文档的索引,也当我解析的查询,我可以把它当作一个较大的字,对吧? 是否有另一种方式来做到这一点,将两个简单的名称(“乔恩·史密斯”),也更复杂的名称(“乔恩·保罗·卡门”)工作吗?
任何意见将真正理解。 提前致谢!
编辑:其他详细信息如下。
在卢克,我把下面的查询:
FullName:jonn smith~
它被解析为:
FullName:jonn CreatedOn:smith~0.5
随着的说明:
BooleanQuery:boost=1.0000
clauses=2, maxClauses=1024
Clause 0: SHOULD
TermQuery:boost=1.0000
Term: field='FullName' text='jonn'
Cluase 1: SHOULD
FuzzyQuery: boost=1.0000
prefixLen=0, minSimilarity=0.5000
org.apache.lucene.search.FuzzyTermEnum: diff=-1.0000
FilteredTermEnum: Exception null
“CreatedOn”是在索引的另一场。 我试图把周围的术语“JONN史密斯”行情,但随后它把它像一个phrasequery,来代替。 我相信,问题是,我只是没有做正确的事情,但如此绿色的这一切,我不知道是什么的东西确实是。