Lucene和昵称匹配

时间:2013-03-11 02:52:34

标签: solr lucene

我有一系列包含昵称(甚至包含空格)和ID的文档。

昵称可以像[“example”,“nick n4me”,“nosp4ces”,“A fancy guy”]。

我必须找到一个查询,允许我通过完美匹配,模糊或具有部分字符的事件来查找配置文件。

因此,如果写下“昵称”或“昵称”或“昵称”,则文件“昵称”总是会出来。

我尝试了类似的东西:

nickname:(%1%^4 %1%~^3 %1%*^1) 

其中“%1%”是我正在搜索的内容,但它不起作用,特别是对于空格或数字昵称。例如,如果我尝试搜索“nick n”,则查询将是:

nickname:(nick n^4 nick n~^3 nick n*^1) 

2 个答案:

答案 0 :(得分:0)

使用^进行提升只会影响评分,而不会影响匹配,即如果您的查询完全不匹配,提升条款与否将不会产生任何影响。

在您的特定示例中,查询将不匹配,因为:

1)nick n将无法匹配,因为这需要令牌nickn已被标记化;

2)编辑:如果您使用标准查询解析器,我发现模糊查询仅适用于单个术语。在您的情况下,您可能应该使用ComplexPhraseQueryParser重写nick n~,因此您可以对整个PhraseQuery进行模糊查询。此外,您可以为模糊查询指定阈值(从技术上讲,您指定的最小Levenshtein距离)。显然你必须调整门槛,这通常需要一些试验和错误。

答案 1 :(得分:0)

更简单的策略是将所有昵称加载到一个字段中 - 在您的示例中,您的昵称字段将包含4个值。如果您想在昵称中使用嵌入空格,则需要使用比StandardAnalyzer更简单的分析器或使用短语搜索。