1

我有一系列包含昵称(甚至带有空格)和 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) 
4

2 回答 2

0

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

于 2013-03-29T20:59:30.347 回答
0

提升^只会影响评分而不是匹配,即如果您的查询根本不匹配,提升条款与否不会有任何区别。

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

1)nick n不匹配,因为这需要令牌nickn已被令牌化;

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

于 2013-03-11T09:17:30.327 回答