Azure搜索-正则表达式搜索

时间:2020-06-19 21:11:00

标签: azure lucene azure-cognitive-search

我正在尝试配置Azure搜索以查找一些具有特殊字符的字符串,例如 ABC * DEF

当我使用"ABC*DEF"查找完整术语时,它会很好地工作。

如果我想使用正则表达式,就会出现问题:

  • 当我使用诸如/(.*)ABC(.*)/之类的部分术语时,结果没有问题
  • 当我使用诸如/(.*)DEF(.*)/之类的部分术语时,结果没有问题
  • 但是当我尝试寻找类似/(.*)C\*D(.*)/的东西时,结果为空。

我正在使用标准分析仪。我也尝试了关键字分析器,但是正则表达式搜索根本不起作用。

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

您将无法使用标准分析器创建与ABC * DEF匹配的正则表达式。

如果使用“标准”分析器运行"ABC\*DEF"analyzer api,您会看到ABC*DEF在索引编制时被分为2个标记-> "ABC"和{ {1}}。正则表达式的表达式没有进行分析,但是,它们需要匹配索引中存在的令牌。

由于索引中不存在"DEF"(仅存在“ ABC”和“ DEF”),因此无法使用要搜索的表达式来找到它。

使用“关键字”分析器会将整个字段保留为单个标记,因此,如果字段“ only”包含表达式ABC\*DEF,则正则表达式将在其上起作用,但是,如果{{1 }}是一段较大的文本的一部分,那么那可能不是您想要的。

您最好的选择是创建一个custom analyzer,以保留与您的用例相关的特殊字符的方式标记您的文本。

答案 1 :(得分:0)

如果您要搜索特殊字符,为什么不丢弃普通字符?

[^\w]
相关问题