转义特殊字符并编码不安全和保留的字符Lucene查询语法Azure搜索

时间:2019-01-01 11:24:36

标签: lucene azure-search

在天青搜索的index中,我有单词“ C && K”,“ So`am`I”,“ Ant || Man”,“ A * B == AB”,“ Ant + Man”。 / p>

根据Doc来转义特殊字符+ - && || ! ( ) { } [ ] ^ " ~ * ? : \ /,我需要在它们前面加上反斜杠(\),对于不安全和保留的字符,则需要在URL中进行编码。

对于“ C && K”,我的搜索网址=> /indexes/{index-name}/docs?api-version=2017-11-11&search=C%5C%26%5C%26K~&queryType=full

对于“ So`am`I”,我的搜索网址=> /indexes/{index-name}/docs?api-version=2017-11-11&search=So%5C%60am%5C%60I~&queryType=full

对于“ Ant || Man”,我的搜索网址=> /indexes/{index-name}/docs?api-version=2017-11-11&search=A%5C*B%3D%3DAB~&queryType=full

对于“ A * B == AB”,我的搜索网址=> /indexes/{index-name}/docs?api-version=2017-11-11&search=A%5C*B%3D%3DAB~&queryType=full

对于“ Ant + Man”,我的搜索网址=> /indexes/{index-name}/docs?api-version=2017-11-11&search=Ant%5C%2BMan~&queryType=full

对于所有关闭的对象,我都没有搜索结果。我得到"value": []

对于“ C && K”,我也尝试过

url => /indexes/{index-name}/docs?api-version=2017-11-11&search=C%5C%26%26K~&queryType=full

url => /indexes/{index-name}/docs?api-version=2017-11-11&search=C%26%5C%26K~&queryType=full

对于“ So`am`I”,我也尝试过

url => /indexes/{index-name}/docs?api-version=2017-11-11&search=So%60am%60I~&queryType=full

它不起作用。我在这里做什么错了?

2 个答案:

答案 0 :(得分:1)

通过标准分析,所有这些都将被索引为多个术语。但是,不会对模糊查询进行分析,因此它将尝试将其作为单个术语查找。也就是说,当您对“ Ant || Man”进行索引时,经过分析,最终在索引中包含术语“ ant”和“ man”。当您搜索Ant||Man时,它将以与索引时几乎相同的方式对其进行分析,但是当搜索Ant||Man~时,将不会分析该查询,并且由于其中不存在类似的术语索引,您将不会获得任何匹配。同样,对于“ A * B == AB”,您将获得术语“ b”和“ ab”(“ a”是默认分析的停用词)。

因此,请尝试在不使用~的情况下进行查询。

答案 1 :(得分:1)

除了femtoRgon的响应之外,如果您始终希望可以按原样搜索它们,那么您可能还想考虑使用不将这些词索引为多个词的自定义分析器。有documentation on custom analyzers here,您可以使用Analyze API进行测试以确保给定的分析仪能够按预期工作。