微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C# 不转义 Lucene 查询中的搜索运算符

如何解决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

您是否希望用户输入运算符?如果没有,您可以转义用户输入的所有特殊字符。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。