c# - C# 不转义 Lucene 查询中的搜索运算符
问题描述
根据https://docs.microsoft.com/en-us/azure/search/query-lucene-syntax特殊字符应该被转义:
需要转义的特殊字符包括: + - & | !( ) { } [ ] ^ " ~ * ? : \ /
问题是其中一些是搜索运算符:+ - | ”。
与引号 " 相同的问题。当它们是运算符时,我需要区分大小写:"banking account" 和banking account(不带引号)是2个不同的查询。
例如,报价可能是英寸:十英寸(十英寸)。
要是有这样的就好了:
string searchPhrase = banking -account // no need to escape because "-" is a search operator
string searchPhrase = "banking :-\) sucks" // needed to escape because "-" is not a search operator
string searchPhrase = bank "account opening" // no needed to escape
string searchPhrase = 100\" // inches not a search operator must be escaped
上面写的内容是用针对 Azure 搜索索引的搜索查询进行测试的:
“search=banking -account”和“search=banking \-account”(带有转义的“-”)产生不同数量的结果。
有没有办法以编程方式决定特殊字符何时需要转义,或者我在这里遗漏了一些明显的东西?
解决方案
如果您使用的是standard.lucence,大多数特殊字符将充当分隔符。而且您的数据不会与特殊字符一起索引。您可以参考此链接并测试您的数据如何使用不同的分析器进行索引。
https://docs.microsoft.com/en-us/rest/api/searchservice/test-analyzer
您是否希望用户输入运算符?如果不是,您可以转义用户输入的所有特殊字符。
推荐阅读
- multidimensional-array - 是否可以将浏览数据隔离到特定的 SSAS 分区
- javascript - 如何将 Angular 中的类名从 component.ts 传递到 html SVG
- angular - 如何在 setInterval 函数后访问全局变量。变量即使在设置后也会给出 undefined 或 NaN
- android - 匕首片段的依赖注入问题
- wordpress - 使用简码的多个 WP 查询分页问题
- directory - Jekyll - 我添加的文件夹不断消失
- python - 如何在场景 QGraphicsScene 上居中小部件
- javascript - foreach,等待每次迭代,直到收到响应(使js同步)
- scala - 直接引用内部案例类中的值或方法
- javascript - 如何在 JavaScript 中匹配二维数组中的对?