【问题标题】:Unable to get docs and facets in one solr CQL query in DSE Search无法在 DSE 搜索中的一个 solr CQL 查询中获取文档和方面
【发布时间】:2017-11-01 13:54:03
【问题描述】:

要求:是使用DSE Search实现分面搜索

问题:无法在一个 CQL solr 查询中获取文档或数据以及 facets

使用的工具和技术: Datastax Sandbox 5.1(Cent OS + Virtual box)并尝试 DSE 搜索

创建了下表并使用了 dsetool enable 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 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 开发中心尝试以下查询 (CQL) 期望看到数据和方面时,我只看到方面

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

得到了结果,但它只有构面,没有数据:

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

问题:谁能解释为什么 CQL 查询不返回数据,尽管指定了"q":"*:*"

【问题讨论】:

    标签: solr datastax datastax-enterprise cql3 cassandra-3.0


    【解决方案1】:

    与 HTTP 查询接口不同,not possible 在 DSE 5.1(或任何更早版本)中从单个 CQL solr_query 获取行结果和构面。

    【讨论】:

    • 谢谢。您提到它在 DSE 5.1 中是不可能的,是否有任何其他版本支持同时获取文档和方面?另外,您能否指出或教育我这个限制背后的技术原因是什么?
    • 我已经更新了我的回复,以澄清从 5.1 开始没有支持此功能的 DSE 版本。
    • 这在技术上并非不可能,但这里的一个问题是,将构面结果和文档结果放在具有相同列标题的单个基于行的结果中会很尴尬。
    • 我有一个应用程序,我想执行查询并获取后续交互的构面。因为我无法在一次调用中获取文档和方面,所以我需要对 Cassandra/DSE 进行 2 次调用。至少,具有 'SELECT * JSON ...' 的查询应该返回两者,以确保我们具有类似于 Solr http API 中的功能。
    【解决方案2】:

    这只是一个产品决定。正如 Caleb 指出的那样,开发人员解析结果的体验被认为不太理想。此外,对于分布式 P2P 数据存储 (C*),发出 2 个异步查询、1 个用于构面结果和 1 个用于“前十名”的解决方法是首选的查询模式。它们不必连续完成。

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

    【讨论】:

    • 你所说的有 2 个异步查询,一个用于文档/数据,一个用于构面,这是有道理的。我们能做到这一点。但是在某些情况下,我们可能希望避免跨不同层或网络和 NRI 设置的两个调用。在我们公司,我们有 C* (DSE Enterprise) + Solr (DSE Search) 设置。写入 C* 的数据在 Solr(多个 C* 节点)中建立索引。您提到我们可以使用 Solr HTTP API,如果我直接使用 Solr HTTP API,我会得到跨多个 C* 集群的所有可用数据吗?
    猜你喜欢
    • 2023-04-04
    • 2016-06-14
    • 2017-11-20
    • 2017-04-15
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 2015-02-03
    相关资源
    最近更新 更多