无法在DSE搜索中的一个solr CQL查询中获取文档和方面
要求:是使用DSE搜索实现分面搜索 问题:无法在一个CQL solr查询中获取文档或数据以及方面 使用的工具和技术:Datastax Sandbox 5.1(Cent OS+虚拟箱)并尝试DSE搜索 创建下表并使用dsetool启用解决方案(DSE搜索)): 插入以下数据无法在DSE搜索中的一个solr CQL查询中获取文档和方面,solr,datastax,datastax-enterprise,cql3,cassandra-3.0,Solr,Datastax,Datastax Enterprise,Cql3,Cassandra 3.0,要求:是使用DSE搜索实现分面搜索 问题:无法在一个CQL solr查询中获取文档或数据以及方面 使用的工具和技术:Datastax Sandbox 5.1(Cent OS+虚拟箱)并尝试DSE搜索 创建下表并使用dsetool启用解决方案(DSE搜索)): 插入以下数据 INSERT INTO employee (empid,deptid,name) VALUES (100,200,'John'); INSERT INTO employee (empid,deptid,name) VALUES
INSERT INTO employee (empid,deptid,name) VALUES (100,200,'John');
INSERT INTO employee (empid,deptid,name) VALUES (101,201,'Helen');
INSERT INTO employee (empid,deptid,name) VALUES (102,201,'John');
我尝试从Solr Admin进行方面查询,如下所示
http://localhost:8983/solr/test.employee/select?q=*:*&wt=json&indent=true&facet=true&facet.field=name
获得了预期的包含文档(或数据)和方面的结果
{
"responseHeader": {
"status": 0,
"QTime": 1
},
"response": {
"numFound": 3,
"start": 0,
"docs": [{
"_uniqueKey": "[\"100\",\"200\"]",
"empid": 100,
"deptid": 200,
"name": "John"
},
{
"_uniqueKey": "[\"101\",\"201\"]",
"empid": 101,
"deptid": 201,
"name": "Helen"
},
{
"_uniqueKey": "[\"102\",\"201\"]",
"empid": 102,
"deptid": 201,
"name": "John"
}
]
},
"facet_counts": {
"facet_queries": {},
"facet_fields": {
"name": [
"john", 2,
"helen", 1
]
},
"facet_dates": {},
"facet_ranges": {},
"facet_intervals": {}
}
}
但在Datastax devcenter中尝试以下查询(CQL)时,希望看到数据和方面,我只看到方面
select JSON * from test.employee where solr_query = '{"q":"*:*", "facet" : {"field":"name"}}';
得到了结果,但它只有方面,没有数据:
{"facet_fields" : {"name" : {"john" : 2,"helen" : 1 } } }
问题:有人能解释为什么CQL查询不返回数据,尽管指定了
“q”:“*:*”
?与HTTP查询接口不同,它是从DSE 5.1(或任何早期版本)中的单个CQLsolr\u查询中获取行结果和面。与HTTP查询接口不同,它是从DSE 5.1(或任何早期版本)中的单个CQLsolr\u查询中获取行结果和面。这只是一个产品决策。正如Caleb指出的,开发人员解析结果的经验被认为是不可取的。此外,对于分布式P2P数据存储(C*),最好的查询模式是发出2个异步查询,1个用于方面结果,1个用于“前十名”。它们不必连续进行
最终,如果需要Solr行为,则可以在DSE中使用Solr HTTP API。CQL API更多的是针对C*数据提供简单的FTS,而不一定支持或完成vanilla Solr通过CQL所做的一切。这只是一个产品决策。正如Caleb指出的,开发人员解析结果的经验被认为是不可取的。此外,对于分布式P2P数据存储(C*),最好的查询模式是发出2个异步查询,1个用于方面结果,1个用于“前十名”。它们不必连续进行
最终,如果需要Solr行为,则可以在DSE中使用Solr HTTP API。CQL API的目的更多的是提供C*数据上的简单FTS,而不一定支持或完成vanilla Solr通过CQL所做的一切。谢谢。您已经提到在DSE 5.1中它是不可能的,是否有其他版本同时支持获取文档和方面?另外,您能告诉我或教育我这一限制背后的技术原因吗?我更新了我的回复,以澄清从5.1开始没有支持这一点的DSE版本。这在技术上不是不可能做到的,但是这里的一个问题是将方面结果和文档结果放在一个具有相同列标题的基于单行的结果中的尴尬。我有一个应用程序,我想执行查询并获取方面以进行后续交互。因为我无法在一次调用中获得文档和方面,所以我需要向Cassandra/DSE调用两次。至少,具有“SELECT*JSON…”的查询应该同时返回这两个参数,以确保我们具有与Solr http API中类似的功能。谢谢。您已经提到在DSE 5.1中它是不可能的,是否有其他版本同时支持获取文档和方面?另外,您能告诉我或教育我这一限制背后的技术原因吗?我更新了我的回复,以澄清从5.1开始没有支持这一点的DSE版本。这在技术上不是不可能做到的,但是这里的一个问题是将方面结果和文档结果放在一个具有相同列标题的基于单行的结果中的尴尬。我有一个应用程序,我想执行查询并获取方面以进行后续交互。因为我无法在一次调用中获得文档和方面,所以我需要向Cassandra/DSE调用两次。至少,具有“SELECT*JSON…”的查询应该返回两者,以确保我们具有与Solr http API中类似的功能。您所说的两个异步查询(一个用于文档/数据,一个用于方面)是有意义的。我们可以做到。但在某些情况下,我们可能希望避免跨不同层或网络和NRI设置进行两次调用。在我们公司,我们有C*(DSE企业)+Solr(DSE搜索)设置。写入C*的数据在Solr(多个C*节点)中被索引。您已经提到,我们可以使用Solr HTTP API,如果我直接使用Solr HTTP API,我是否可以获得跨多个C*集群的所有可用数据?您所说的有两个异步查询,一个用于文档/数据,一个用于方面,这很有意义。我们可以做到。但在某些情况下,我们可能希望避免跨不同层或网络和NRI设置进行两次调用。在我们公司,我们有C*(DSE企业)+Solr(DSE搜索)设置。写入C*的数据在Solr(多个C*节点)中被索引。您已经提到,我们可以使用Solr HTTP API,如果我直接使用Solr HTTP API,我会获得跨多个C*集群的所有可用数据吗?
{"facet_fields" : {"name" : {"john" : 2,"helen" : 1 } } }