我有一系列包含昵称(甚至包含空格)和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)
答案 0 :(得分:0)
使用^
进行提升只会影响评分,而不会影响匹配,即如果您的查询完全不匹配,提升条款与否将不会产生任何影响。
在您的特定示例中,查询将不匹配,因为:
1)nick n
将无法匹配,因为这需要令牌nick
或n
已被标记化;
2)编辑:如果您使用标准查询解析器,我发现模糊查询仅适用于单个术语。在您的情况下,您可能应该使用ComplexPhraseQueryParser重写nick n~
,因此您可以对整个PhraseQuery
进行模糊查询。此外,您可以为模糊查询指定阈值(从技术上讲,您指定的最小Levenshtein距离)。显然你必须调整门槛,这通常需要一些试验和错误。
答案 1 :(得分:0)
更简单的策略是将所有昵称加载到一个字段中 - 在您的示例中,您的昵称字段将包含4个值。如果您想在昵称中使用嵌入空格,则需要使用比StandardAnalyzer更简单的分析器或使用短语搜索。