在第 1 行对 Lucene 词法错误使用错误的转义字符无法解析遇到 <EOF>。肯蒂科 12
Posted
技术标签:
【中文标题】在第 1 行对 Lucene 词法错误使用错误的转义字符无法解析遇到 <EOF>。肯蒂科 12【英文标题】:Using the wrong escape character for Lucene lexical error at line 1 Cannot Parse Encountered <EOF>. Kentico 12 【发布时间】:2019-10-20 04:48:28 【问题描述】:我有一个与以下问题类似的问题:Lucene error while parsing Query: Cannot parse '': Encountered “” at line 1, column 0,我已经尝试了所有转义。还能是什么?
我正在使用 Kentico 12 修补程序 14,以及他们的 Lucene.NET 3.0.3 实现。我的智能搜索索引使用标准分析器,见下文:
当我使用以下 lucene 语法拉回 en-US 区域性结果时,我得到了预期的行。此语法由 Kentico 自动创建,是检索正确区域性所必需的。这是直接从属性值复制而来的。
"+_culture:([en-us TO en-us] [invariantifieldivaluei TO invariantifieldivaluei])"
当我添加(或单独使用)以下值(以许多不同的形式 - 不带括号等)时:
"+length:(24\")"
我总是得到词法错误:
"Cannot parse '+_culture:([en-us TO en-us] [invariantifieldivaluei TO invariantifieldivaluei]) +length:(24\")': Lexical error at line 1, column 95. Encountered: <EOF> after : \"\\\")\""
如您所见,我相信我已经正确地转义了长度值。我在这里错过了什么?
其他值,不需要转义就可以了,比如:
+material:(nitrile)
对我在 24" 值上做错了什么有任何想法?分析仪错误?需要 Kentico 修补程序?过滤器顺序错误?感谢您的宝贵时间!
【问题讨论】:
Lucene 日志中的查询是什么样的?'+length:(24")'
和 '+length:(24\\")'
是如何解析的?可能是反斜杠也用于从代码中转义特殊字符(查询首先被解析为字符串客户端,然后成为将由 Lucene 查询解析器解析的请求),所以我会尝试转义反斜杠自己来看看这个查询是如何在客户端和服务器端解析的。
感谢您的帮助!你的建议让我尝试了一些额外的事情,并找到了一个帮助方法来转义关键字。请参阅下面的解决方案。
【参考方案1】:
似乎我不是第一个在 Kentico 中处理这个问题的人,并找到了以下帮助方法:CMS.Search.SearchSyntaxHelper.EscapeKeyWords(string)。我将此方法应用于我的特定搜索过滤器值,它按预期工作!父类中也有很多好的方法,看看吧。
【讨论】:
以上是关于在第 1 行对 Lucene 词法错误使用错误的转义字符无法解析遇到 <EOF>。肯蒂科 12的主要内容,如果未能解决你的问题,请参考以下文章