【发布时间】:2017-05-12 13:41:47
【问题描述】:
这似乎是一个很简单的问题,但是我google了很久,没有找到任何答案。
具体来说,我在使用 Solr 6.5.0 执行非常简单的 select * sql 查询时遇到了问题。
-
问:我想达到什么目的?
- 答:使用 Solr sql 无限选择语句来选择我的集合中具有“property_1”== 100 的所有记录
-
问:我遇到了什么问题?
- 答: 执行查询时,我收到一条错误消息“java.io.IOException: score is not a valid field for unlimited queries。”
-
问:如何防止 solr 自动为我的 sql 查询打分(我不关心分数),这样我就可以执行无限制的 sql 查询并取回我的文档中的所有字段想要吗?
- 答: ????
当我对集合中的所有文档执行 solr sql 查询时,它会失败,因为 solr 自动在结果中包含一个 score 字段,并且 score 字段不能用于无限的 sql 查询。问题是我的收藏中没有“分数”字段,我没有要求对结果进行评分。从谷歌搜索来看,我似乎默认从 solr 获得一个 score 字段,但我的阅读表明我应该只在我的查询中请求它时才得到这个(我没有这样做)。
我正在使用 Solr 管理 UI 来执行 sql 查询。以下是我得到的确切错误消息:
stmt=select * from TestIndex where property_1 = '100'"
{
"result-set":{
"docs":[{
"EXCEPTION":"Failed to execute sqlQuery 'select * from TestIndex
where property_1 = '100'' against JDBC connection 'jdbc:calcitesolr:'.\nError
while executing SQL \"select * from TestIndex where property_1 = '100'\":
java.io.IOException: score is not a valid field for unlimited queries.",
"EOF":true,
"RESPONSE_TIME":172}]}}
现在这里是相同的查询,除了不使用上述查询,我将“select *”部分替换为“select FieldA”并获取所有包含“FieldA”的记录。此查询产生以下结果,证明无限制的 sql 选择有效
stmt=select FieldA from TestIndex where property_1 = '100'"
{
"result-set":{
"docs":[{
"FieldA":["AAAA"]}
,{
"FieldA":["AAAA"]}
,{
"FieldA":["AAAA"]}
,{
"EOF":true,
"RESPONSE_TIME":247}]}}
问题是我希望返回的所有字段不仅仅是 FieldA,所以上面的查询对我来说毫无用处。此外,这只是一个 POC。在现实世界的用例中,指定 sql 语句中的所有字段是不现实的。我希望 * 能够工作,如果 Solr 没有自动尝试在无限结果中提供分数,它似乎会起作用。因此,执行以下 sql 查询,虽然它可以工作,但在现实世界的场景中是不现实的。
stmt=select FieldA, FieldB, FieldC, FieldD from TestIndex where property_1 =
'100'
为了让事情变得非常简单,我的测试集合中有 6 个文档。以下是所有文件。我使用了非 sql solr /select 处理程序来让这个结果显示在这里(顺便说一句,我希望能够执行 solr sql select * 以产生与 solr /select *:* 相同的结果,如下所示):
{
"responseHeader":{
"zkConnected":true,
"status":0,
"QTime":0,
"params":{
"q":"*:*",
"indent":"on",
"wt":"json",
"_":"1494587051946"}},
"response":{"numFound":6,"start":0,"docs":[
{
"FieldA":["AAAA"],
"FieldB":["BBBB"],
"FieldC":["CCCC"],
"FieldD":["DDDD"],
"dateTimestamp":1494591988400,
"property_1":100,
"_version_":1567193288840052736},
{
"FieldA":["AAAA"],
"FieldB":["BBBB"],
"FieldC":["CCCC"],
"FieldD":["DDDD"],
"dateTimestamp":1494591988403,
"property_1":100,
"_version_":1567193289014116352},
{
"FieldA":["AAAA"],
"FieldB":["BBBB"],
"FieldC":["CCCC"],
"FieldD":["DDDD"],
"dateTimestamp":1494591988404,
"property_1":100,
"_version_":1567193289034039296},
{
"FieldA":["AAAA"],
"FieldB":["BBBB"],
"FieldC":["CCCC"],
"FieldD":["DDDD"],
"dateTimestamp":1494591995474,
"property_1":200,
"_version_":1567193296256630784},
{
"FieldA":["AAAA"],
"FieldB":["BBBB"],
"FieldC":["CCCC"],
"FieldD":["DDDD"],
"dateTimestamp":1494591995475,
"property_1":200,
"_version_":1567193296265019392},
{
"FieldA":["AAAA"],
"FieldB":["BBBB"],
"FieldC":["CCCC"],
"FieldD":["DDDD"],
"dateTimestamp":1494591995476,
"property_1":200,
"_version_":1567193296267116544}]
}}
抱歉,帖子太长了。我试图提供所有细节。
有什么想法吗?
【问题讨论】: