DSE 搜索和 Solr - UDT 搜索查询中的空格问题



我正在尝试让我的DSE搜索查询工作(使用Solr)。但是,在使用用户定义类型 (UDT) 构造查询时,我遇到了空格字符的问题。 例如:我有一个Student表和一个Name类型,其中Student表有一个list<frozen<Name> names.Name类型有说,firstnamelastname.如果我执行以下查询,它会抛出错误:

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

从学生中选择 *,其中 solr_query= '{!tuple}names.firstname:John 史密斯';

所以我尝试转义下面的空格,它工作得很好。

从学生中选择 *,其中 solr_query= '{!tuple}names.firstname:John\ 史密斯';

但是,当我将上面的 UDT 字段与 AND 运算符一起使用时,它会再次失败。

从学生中选择 *,其中 solr_query= 'student_id:123456 和 {!tuple}names.firstname:John\ 史密斯';

无法执行 CQL 脚本:org.apache.solr.search.SyntaxError:无法解析名称.firstname ...第 1 行的词法错误,列...遇到:在 :" 之后

这是名字的字段类型:

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

作为 Solr 的初学者,我一直在努力使这些查询起作用。任何帮助将不胜感激。谢谢!

我根本不是你正在使用的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. 我创建了一个新的org.apache.solr.schema.TextField,并添加了
    PatternTokenizerFactory令牌器,以逗号(,)作为模式。

  2. 修剪了开头和结尾的空格,以及 将文本中的空格替换为与任何匹配的"?" 单个字符。就我而言,这样做是可以的。

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

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

从学生中选择 *,其中 solr_query= '(student_id:123456 和 {!tuple}names.firstname:John?史密斯)';

尽管这将匹配John Smith,John-Smith甚至John.Smith,但这在我的情况下是可以的,因为无论如何我们都应该回馈这些结果。

最新更新