有没有办法指定一个不会在连字符上中断但会在其他标点符号上中断的 Azure 认知搜索分析器

问题描述

短语“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