Lucene索引和查询设计的问题 - 人们搜索(Lucene Index and Query Des

2019-10-29 19:30发布

我最近刚开始使用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,来代替。 我相信,问题是,我只是没有做正确的事情,但如此绿色的这一切,我不知道是什么的东西确实是。

Answer 1:

我的问题是与我是如何建立索引。 我落得这样做是确保它没有令牌化的全名,并且查询开始返回正确的结果。 从上面的解释结果对我而言一个ID10T错误是由于,现在返回正确。



文章来源: Lucene Index and Query Design Question - Searching People