使用Lucene QueryAPI访问SQL

使用Lucene QueryAPI访问SQL,sql,lucene,Sql,Lucene,您能否建议我是否可以仅使用Lucene的查询功能来生成SQL查询?类似SQLQueryBuilder的东西 我有一个来自Web服务器集群的大型SQL日志数据库,其中包含原始请求和响应字符串以及一些其他有用/较少的位和BOB。我需要做的是分析原始请求中的参数,并与生成的响应进行比较,查看比率、波动性、可变性、一致性等 这个问题与分析阶段无关,只涉及从数据库检索与我感兴趣的参数匹配的数据。因此,我可以在好的旧sql查询中执行此操作,在逐案的基础上手动构建所需的精确查询。但这有点蹩脚;我想我们可以更聪

您能否建议我是否可以仅使用Lucene的查询功能来生成SQL查询?类似SQLQueryBuilder的东西

我有一个来自Web服务器集群的大型SQL日志数据库,其中包含原始请求和响应字符串以及一些其他有用/较少的位和BOB。我需要做的是分析原始请求中的参数,并与生成的响应进行比较,查看比率、波动性、可变性、一致性等

这个问题与分析阶段无关,只涉及从数据库检索与我感兴趣的参数匹配的数据。因此,我可以在好的旧sql查询中执行此操作,在逐案的基础上手动构建所需的精确查询。但这有点蹩脚;我想我们可以更聪明一点。特别是我已经看到大量类似但细微不同的查询非常有用。由于我希望通过web界面向非技术最终用户公开一个搜索框,所以添加sql查询似乎不是一个好主意。。。以及永久性维护请求的配方(我可以第一个说,呃,不,谢谢!)

在理想情况下,我公开了一个搜索表单,可以选择编写简单的查询,如

request:"someAttribute=\"someValue\"" AND response="some hoped for result" AND daterange:30
这将有望找到过去30天内包含someAttribute=“someValue”的所有请求实例。然后,将对给定的响应文本进行标准统计分析,并将结果打印在屏幕上。至少,这是个想法

确定如何处理自定义字段定义或特殊单词的大部分实际逻辑都需要我自己编写,这没关系。注意,我的非技术最终用户对xml非常熟悉,他们可以处理一些attr=“value”语法,至少在工具的第一次迭代中是这样的:D

总之,我想: 1) 允许用户使用类似google的搜索语法(例如通过Lucene的QueryAPI)指定要在日志中匹配的文本 2) 允许一个层根据特殊单词或字段操作查询(例如,该层可能在Java对象阶段) 3) 将最终查询转换为适合我的数据库架构的sql查询 4) 查询数据库并吐回结果集以进行统计分析 5) 网站上的漂亮印刷品:)

我完全找错人了吗?看起来这应该是可能的,但我似乎找不到太多。我已经在谷歌上搜索了一段时间,例如,尝试将“Lucene SQLQueryBuilder”作为一个可能的开始,但并没有找到多少线索

因此,我的问题是:

  • 以前有人试过像这样使用Lucene的QueryAPI吗?它起作用了吗?有什么问题吗
  • 有更好的查询api库吗
示例、已完成的讨论和开源实现将非常有用

非常感谢


注:我不希望Lucene的搜索功能如此强大,因为我只会寻找精确的匹配项。我只需要在数据库顶部设置一个查询层。

我怀疑您是否可以重用lucene的任何代码来实现此目的。Lucene对这些查询进行了内部重写,但将其转换为语法,我认为这对SQL没有多大帮助

name: Phil AND lastname: Miller AND NOT age: 26
将被改写为

+name Phil +lastname: Miller -age: 26
因此,我认为您必须将转换编写为SQL查询语法


但也许你可以用Lucene来做这个。看看哪种方法非常方便,可以轻松创建sql表的lucene索引。

我怀疑您是否可以重用lucene中的任何代码。Lucene对这些查询进行了内部重写,但将其转换为语法,我认为这对SQL没有多大帮助

name: Phil AND lastname: Miller AND NOT age: 26
将被改写为

+name Phil +lastname: Miller -age: 26
因此,我认为您必须将转换编写为SQL查询语法


但也许你可以用Lucene来做这个。看看哪种方法非常方便,可以轻松创建sql表的lucene索引。

lucene和sql几乎没有共同之处,因为它们使用完全不同的语法(如HefferWolf所述)和不同的底层数据模型。正如你自己所说的,恐怕你找错人了

然而,也有人试图弥合这一差距。这些都是有趣的实验,但我会非常小心地在生产中使用这些代码


您可以使用某些SQL数据库中可用的全文搜索功能,或者重新索引Lucene中的所有数据,并在不使用数据库的情况下使用它。

Lucene和SQL几乎没有共同之处,因为它们使用完全不同的语法(如HefferWolf所述)和不同的底层数据模型。正如你自己所说的,恐怕你找错人了

然而,也有人试图弥合这一差距。这些都是有趣的实验,但我会非常小心地在生产中使用这些代码


您可以使用某些SQL数据库中可用的全文搜索功能,或者重新索引Lucene中的所有数据,并在没有数据库的情况下使用它。

我以为Lucene创建了一个java对象树来表示查询?我想那是在你提到的重写之后?我希望有人可能熟悉与这些对象的交互。我看了一下hibernate搜索的东西;如果底层sql结构与hibernate无关,那么这种方法是否也有效?只有在使用hibernate时,hibernate搜索才有效。我认为Lucene创建了一个java对象树来表示查询?我想那是在你提到的重写之后?我希望有人可能熟悉与这些对象的交互。我看了一下hibernate搜索的东西;如果底层sql结构与hibernate无关,这是否也有效?只有在使用hibernate时,hibernate搜索才有效。我们在生产中非常成功地使用hibernate搜索,甚至直接使用lucene进行搜索和使用hibernate搜索进行索引的混合使用也非常有效。我们使用hibernate-s