我有以下Lucene .Net搜索代码:
如果我使用如下查询:
AccountId:1 AND CompanyId:1 AND CreatedOn:[636288660000000000 TO 636315443990000000] AND AuditProperties.FriendlyName.NewValue:CustomerId|235
与CustomerId = 235完全匹配时效果很好。
但是,如果我尝试搜索通配符匹配,例如:
AccountId:1 AND CompanyId:1 AND CreatedOn:[636288660000000000 TO 636315443990000000] AND AuditProperties.FriendlyName.NewValue:CustomerId|*235*
它没有取得任何结果。我认为它仍然与价值完全匹配" * 235 *"我在这里错过了什么吗?
谢谢!
答案 0 :(得分:1)
根据QueryParser syntax documentation,不支持字符$test =~ /(.*)Starting(.*)/s;
。但是,您是否打算将其视为逻辑OR或文字字符并不十分清楚。
逻辑OR的正确语法是|
,CustomerId OR *235*
或CustomerId *235*
。
此外,如果这是一个逻辑OR,则必须允许Howto perform a 'contains' search rather than 'starts with' using Lucene.Net中指出的前导通配符。
CustomerId||*235*
parser.AllowLeadingWildcard = true;
要搜索文字管道字符,您应该转义该字符,以便解析器不会将其与逻辑OR混淆。
|