DSE Search And Solr - UDT搜索查询中的空白问题

时间:2017-06-18 19:37:28

标签: solr cassandra datastax-enterprise

我试图让我的DSE搜索查询正常工作(使用Solr)。但是,在使用用户定义类型(UDT)构建查询时,我遇到了具有空白字符的问题。 例如:我有Student表和Name类型,其中Student表有list<frozen<Name> namesName类型有firstnamelastname。如果我执行以下查询,则会抛出错误:

Unable to execute CQL Script : no field name specified in query and no default specified via ‘df’ param.
  

来自Student的SELECT * solr_query =&#39; {!tuple} names.firstname:John   史密斯&#39 ;;

所以我尝试了如下所示转义空白,它运行得很好。

  

来自Student的SELECT * solr_query =&#39; {!tuple} names.firstname:John \   史密斯&#39 ;;

但是,当我使用带有AND运算符的上述UDT字段时,它再次失败。

  

来自学生的SELECT *,其中solr_query =&#39; student_id:123456 AND {!tuple} names.firstname:John \   史密斯&#39 ;;

无法执行CQL脚本:org.apache.solr.search.SyntaxError:无法解析names.firstname ...第1行的Lexical错误,列...遇到:after:“”

这是名字的字段类型:

<fieldType class="org.apache.solr.schema.TextField" name="DelimitedTextField">
      <analyzer>
        <tokenizer class="solr.PatternTokenizerFactory" pattern="[,\s]"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>

作为Solr的初学者,我一直在试图让这些查询起作用。任何帮助将深表感谢。谢谢!

2 个答案:

答案 0 :(得分:0)

我不是你似乎正在使用的所有DSE系统的专家,但是看看这个资源[1],你似乎可能以错误的方式构建布尔查询。 这似乎是一种正确的方法:

+ {!tuple v ='father.name.firstname:Sam'} + {!tuple v ='mother.name.firstname:Anne'}

希望有所帮助

[1] http://docs.datastax.com/en/datastax_enterprise/4.8/datastax_enterprise/srch/srchTupleUDTqueries.html

答案 1 :(得分:0)

通过做一些事情我能够做到这一点。

  1. 我创建了一个新的org.apache.solr.schema.TextField并添加了
    PatternTokenizerFactory tokenizer,以逗号(,)作为模式。

  2. 在开头和结尾修剪白色空间,然后 用'?'替换文本中的空格哪个匹配任何 单个字符。在我的情况下这是可以的。

  3. 我必须在整个查询中添加大括号()。

  4. 因此,使用更新的schema.xml文件和上面提到的其他更改,我现在可以使用以下查询:

      

    SELECT * from Student where solr_query ='(student_id:123456 AND   names.firstname {元组!}:约翰史密斯)';

    虽然这可以与约翰史密斯,约翰史密斯甚至约翰史密斯相匹敌,但在我的情况下这是好的,因为无论如何我们应该回馈这些结果。