我有一个客户在创建搜索应用程序。他们在ID字段之外的每个文档中都有一个唯一的标识符,可以定期搜索。该字段恰好包含破折号。我们发现使用此字段唯一地搜索给定文档的索引的唯一方法是在字段前面加上字段名,并用类似于以下内容的引号将其括起来:
EventId:“ TSA-12-01112-15”
换句话说,搜索:
TSA-12-01112-15
或
“ TSA-12-01112-15”
返回多个结果,其中分析器似乎将由“-”分隔的字段的每个段作为单独的标记返回。我们正在相关领域使用standard.lucene分析仪。
这是预期的行为吗?有什么方法可以解决此问题,以便上面显示的没有字段名称的简单短语搜索将返回预期结果?
答案 0 :(得分:0)
标准的Lucene分析器将-
视为定界符,并将每个部分生成为单独的标记。从您的解释来看,您的用例需要完全匹配。您可以将keyword分析器用于此字段,然后按原样使用短划线传递文本。
关键字分析器为整个文本生成单个令牌,并且是标识符和代码的不错选择。一个限制是查询文本应与字段文本完全匹配。例如。
EventId:TSA-12-01112-15
将与文档中EventId
中的文本正好TSA-12-01112-15
此外,如果您的查询模式严重偏向精确匹配,并且它们的相对顺序并不重要,请考虑使用为此进行优化的过滤器表达式。