问题描述
短语“non-emergency”在语义上不同于孤立的“non”和“emergency”这两个词。
特别是,搜索“emergency”不应与“non-emergency”匹配。但是,将所有其他单词按所有其他标点符号分开仍然是有意义的。例如
"In a situation that is a non-emergency,do not call 911."
空白分析器不是我想要的,因为我仍然想打破其他没有那么多(任何?)语义含义的标点符号。
这似乎是一个非常普遍且合理的用例,许多人都希望拥有它,但 Azure 认知搜索 (ACS) 中似乎没有它。
这篇文章似乎暗示 Lucene 拥有它: Lucene Index problems with "-" character
我仍在努力安装 ACS,但在与 MS 人员的几封电子邮件中,我没有得到满意(简单)的答案,说明如何执行此操作。对Lucene稍微了解一下就知道这就是我想要的...
提前致谢。
解决方法
您分享的帖子似乎暗示 Lucene 中的 ClassicAnalyzer 是您正在寻找的解决方案。虽然默认情况下 Azure 认知搜索不支持经典分析器,但您应该能够创建一个使用 ClassicTokenizer 的自定义分析器,它受支持并且可能最接近您要查找的内容。
您可能需要考虑的另一个选项是 PatternAnalyzer,它受 Azure 认知搜索支持,因此您可以定义最适合您的正则表达式模式。
有助于实现这两个选项以及尝试许多其他选项的文档:https://docs.microsoft.com/azure/search/index-add-custom-analyzers