2017-05-31 26 views
1

要求:是落实使用DSE搜索面搜索无法得到一个Solr的CQL查询文档和方面在DSE搜索

问题:无法获取文档或数据和方面在一个CQL solr查询。

工具&采用技术: Datastax沙盒5.1(美分OS +虚拟盒),并试图DSE搜索

创建以下使用dsetool使Solr的表&(DSE搜索):

CREATE TABLE test.employee_copy1 (
    empid int, 
    deptid int, 
    name text, 
    solr_query text, -- column got created by enabling DSE Search 
    PRIMARY KEY (empid, deptid) 
) 

插入以下数据,

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管理如下

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": {} 
    } 
} 

但是,当试图下面的查询(CQL)在Datastax devcenter期待看到数据方面,我只看到微面

select JSON * from test.employee where solr_query = '{"q":"*:*", "facet" : {"field":"name"}}'; 

得到了结果,但它为O NLY方面,并没有数据:

{"facet_fields" : {"name" : {"john" : 2,"helen" : 1 } } } 

问题:任何人都可以解释为什么CQL查询不,尽管规定"q":"*:*"的返回数据?

回答

0

与HTTP查询接口不同,它是not possible可以从DSE 5.1(或任何较早版本)中的单个CQL solr_query获取行结果和方面。

+0

谢谢。您已经提到它在DSE 5.1中不可行,是否有任何其他版本支持获取文档和方面? 另外,你能指点我还是教育我这个限制背后的技术原因是什么? –

+0

我已经更新了我的回复,澄清了从5.1开始,没有支持DSE的版本。 –

+0

在技术上做这件事并不是不可能的,但是这里的一个问题是将两个方面的结果和文档结果放在具有相同列标题的单个基于行的结果中的尴尬处境。 –

0

这只是一个产品决定。正如Caleb指出的那样,开发人员分析结果的经验被认为不理想。此外,对于分布式P2P数据存储(C *),发出2个异步查询的解决方法是,首先查询模式为1,结果为1,“Top Ten”为1。他们不必连续进行。

最终,如果需要Solr行为,则可以使用Solr HTTP API在DSE中使用。 CQL API更多地针对C *数据提供简单的FTS,并不一定支持或通过CQL完成所有vanilla Solr的工作。

+0

你说什么有2个异步查询一个用于文档/数据和一个用于分面是有道理的。我们能做到这一点。但有些情况下我们可能希望避免在各个层或网络和NRI设置中进行两次呼叫。 在我们公司,我们有C *(DSE企业)+ Solr(DSE搜索)设置。写入C *的数据在Solr(多个C *节点)中索引。你已经提到过我们可以使用Solr HTTP API,如果我直接使用Solr HTTP API,我会获得跨多个C *集群的所有可用数据吗? –