如何在 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 查询中使用转义字符?的主要内容,如果未能解决你的问题,请参考以下文章