如何在 DSE Search json 查询中使用转义字符?

Posted

技术标签:

【中文标题】如何在 DSE Search json 查询中使用转义字符?【英文标题】:How to use escape character in DSE Search json query? 【发布时间】:2018-02-06 07:15:24 【问题描述】:

我第一次使用 DSE 搜索,我有一个如下表:

 CREATE TABLE keyspace1.table1 (
    id bigint,
    is_dir boolean,
    dir text,
    name text,
    created_date timestamp,
    size bigint,
    solr_query text,
    status text,
    PRIMARY KEY (id, is_dir, dir, name)
) WITH CLUSTERING ORDER BY (is_dir ASC, dir ASC, name ASC)



select id, is_dir, dir,name, created_date from keyspace1.table1 where solr_query= '"fq":"is_dir:false", "q": "name:(abc and local.h) "'  limit 10;

   id | is_dir | dir                          | name    | created_date
------------+--------+------------------------------+---------+---------------------------------
  205 |  False | /include/config/have         | local.h | 2017-08-25 02:54:54.000000+0000
  332 |  False |                            / |     abc | 2017-08-27 17:31:55.000000+0000

我在上面创建了solr核心,如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<schema name="autoSolrSchema" version="1.5">
  <types>
    <fieldType class="org.apache.solr.schema.TrieLongField" name="TrieLongField"/>
    <fieldType class="org.apache.solr.schema.StrField" name="StrField"/>
    <fieldType class="org.apache.solr.schema.BoolField" name="BoolField"/>
    <fieldType class="org.apache.solr.schema.TrieDateField" name="TrieDateField"/>
  </types>
  <fields>
    <field docValues="true" indexed="true" multiValued="false" name="id" stored="true" type="TrieLongField"/>
    <field docValues="true" indexed="true" multiValued="false" name="name" stored="true" type="StrField"/>
    <field indexed="true" multiValued="false" name="is_dir" stored="true" type="BoolField"/>
    <field indexed="true" multiValued="false" name="dir" stored="true" type="StrField"/>
    <field docValues="true" indexed="true" multiValued="false" name="created_date" stored="true" type="TrieDateField"/>
  </fields>
  <uniqueKey>(id,is_dir,dir,name)</uniqueKey>
</schema>

我想用选择数据编写 q 查询,其中 is_dir = false 和 name = 'abc' 和 dir = '/'。

到目前为止,我可以为前两个过滤器选择数据,如下所示:

select id, is_dir, dir,name, created_date from keyspace1.table1 where solr_query= '"fq":"is_dir:false", "q": "name:(abc)"'  limit 10;

  id | is_dir | dir | name | created_date
-----+--------+-----+------+---------------------------------
 332 |  False |   / |  abc | 2017-08-27 17:31:55.000000+0000

但是当我尝试添加 dir = '/' 时,我遇到了语法错误:

select id, is_dir, dir,name, created_date from keyspace1.table1 where solr_query= '"fq":"is_dir:false", "q": "name:(abc and local.h) && dir:/"'  limit 10;

InvalidRequest: Error from server: code=2200 [Invalid query] message="org.apache.solr.search.SyntaxError: Cannot parse 'name:(abc and local.h) && dir:/': Lexical error at line 1, column 32.  Encountered: <EOF> after : """

请指教。

谢谢。

【问题讨论】:

【参考方案1】:

\转义

例子:

select id, is_dir, dir,name, created_date from keyspace1.table1 where solr_query= '"fq":"is_dir:false", "q": "name:(abc and local.h) && dir:\/"'  limit 10;

【讨论】:

它使用 this:: "q": "name:(abc and local.h) && dir:\\/"

以上是关于如何在 DSE Search json 查询中使用转义字符?的主要内容,如果未能解决你的问题,请参考以下文章

DSE 验证 Spark AlwaysOn SQL

如何以简洁的方式在Datastax DSE 5.0 Graph中按顶点ID查询?

DSE 图中是不是支持服务器端功能?

DSE:激活 OLAP

DSE:查询超时/慢

DSE精选文章|MPP数据库查询内部智能化容错