繁体   English   中英

解析Lucene查询语法并转义CloudSearch

[英]Parsing Lucene Query syntax and escaping for CloudSearch

基本上,我有一个需要同时支持Lucene.NET和Amazon CloudSearch的应用程序。

因此,我无法重新编写查询,我需要使用lucene的标准查询,并在查询上使用.ToString()来获取语法。

问题是在Lucene.NET(我不知道Java版本是否相同)中,.ToString()方法返回不带转义字符的原始字符串。

因此,类似:

(title:blah:blah summary:"lala:la")

应该

(title:blah\:blah summary:"lala\:la")

我需要的是一个会添加转义符的正则表达式。

这可能吗? 如果是这样,它将是什么样子。

一些其他可能的差异:

(title:"this is a search:term")
(field5:"this is a title:term")

根据注释和编辑,您似乎希望任何查询字符串都可以被正则表达式正确地转义,并且希望任何给定的Lucene查询都可以由结果字符串准确表示。

那不会发生。

Lucene查询语法无法表达所有Lucene查询。 实际上,从Query.toString()获得的字符串通常甚至不能被QueryParser 解析 ,请记住这并不是对查询的精确重构。

总而言之:您将以错误的方式进行操作。 Query.ToString() 并非旨在对查询进行序列化,并且其目标不是创建可分析的字符串查询。 它主要用于调试等。 如果您一直尝试以这种方式使用它,那么试图使用正则表达式来摆脱歧义查询语法的这种愚蠢行为可能只是麻烦的开始

这个问题提供了另一个例子

您可以使用此正则表达式转义冒号:在字符串的关键点

(?<!title|summary):

然后逃脱捕获的冒号:

说明

向后看?<! 对于任何没有titlesummary的冒号,请匹配冒号:

观看演示

输入

(title:blah:blah summary:"lala:la")

产量

(title:blah\:blah summary:"lala\:la")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM