【问题标题】:How to use escape character in DSE Search json query?如何在 DSE Search json 查询中使用转义字符?
【发布时间】: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 : """

请指教。

谢谢。

【问题讨论】:

    标签: solr cassandra datastax


    【解决方案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:\\/"
    猜你喜欢
    • 1970-01-01
    • 2021-09-26
    • 2020-01-08
    • 1970-01-01
    • 2014-11-04
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    相关资源
    最近更新 更多