【问题标题】:C# NOT escaping search operators in Lucene queryC# 不转义 Lucene 查询中的搜索运算符
【发布时间】:2021-05-27 20:37:48
【问题描述】:

根据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"(带有转义的“-”)产生不同数量的结果。

有没有办法以编程方式决定特殊字符何时需要转义,或者我在这里遗漏了一些明显的东西?

【问题讨论】:

  • 您可能想要开始查看此处定义的用于创建索引的分隔符。很可能您试图在这里逃脱的大多数字符一开始都没有进入索引。它们被认为是单词分隔符,并且像空格一样被删除。所以搜索它们不会产生任何结果。

标签: c# .net azure lucene.net azure-cognitive-search


【解决方案1】:

如果您使用的是standard.lucence,大多数特殊字符将充当分隔符。而且您的数据不会与特殊字符一起索引。 您可以参考此链接并测试您的数据如何使用不同的分析器进行索引。

https://docs.microsoft.com/en-us/rest/api/searchservice/test-analyzer

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 2014-06-07
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 2019-09-07
    相关资源
    最近更新 更多