【发布时间】:2021-12-17 06:11:04
【问题描述】:
我设置了一个 Azure 存储表,其中包含许多值,其中包含连字符、撇号和其他一些 Azure 索引器不喜欢的标点符号。 Hyphenated-Word 在索引时被分成两个标记 - Hyphenated 和 Word。因此,这意味着搜索HyphenatedWord 不会产生任何结果,无论是否有任何通配符或模糊匹配字符。也就是说,Azure 认知搜索支持 Regex Lucene 查询...
因此,我正在尝试找出是否有正则表达式模式可用于将带有或不带有连字符的单词与给定的查询进行匹配。例如,查询homework 应该匹配结果homework 和 home-work。
我知道,如果我试图反其道而行之——即使在查询中提供了连字符也匹配未连字符的单词——我会使用类似 /home(-)?work/ 的内容。但是,我不确定逆向是什么样子——如果这样的事情存在的话。
是否有一个原始的正则表达式模式可以执行我提议的那种匹配?还是我是 SOL?
编辑:我应该指出我提供的示例是不切实际的,因为我并不总是知道连字符应该在哪里。理想情况下,执行此匹配的模式与连字符的精确位置无关。
Edit 2:我发现一个工作但并不完全最佳的解决方案(而且,虽然我没有办法证明这一点,可能不是performant)只是分解查询,删除所有导致令牌中断的特殊字符,然后动态构建一个正则表达式查询,在每个之间都有一个可选匹配查询中的字符。使用homework 示例,该模式看起来类似于[-'\.! ]?h[-'\.! ]?o[-'\.! ]?m[-'\.! ]?e[-'\.! ]?w[-'\.! ]?o[-'\.! ]?r[-'\.! ]?k[-'\.! ]?...这可能是我见过的最丑陋的东西。尽管如此,它还是完成了工作。
【问题讨论】:
标签: regex lucene azure-table-storage azure-cognitive-search