使用带有lucene .net QueryParser的通配符的问题

时间:2017-05-27 18:33:34

标签: lucene full-text-search lucene.net

我有以下Lucene .Net搜索代码:

enter image description here

如果我使用如下查询:

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 *"我在这里错过了什么吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

根据QueryParser syntax documentation,不支持字符$test =~ /(.*)Starting(.*)/s; 。但是,您是否打算将其视为逻辑OR或文字字符并不十分清楚。

逻辑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混淆。

|