我正在使用solr从cassandra表中检索结果。
表格结构:
CREATE TABLE mytable (
field1 uuid,
field2 text ,
bfield blob,
cstdta_<text, text>,
PRIMARY KEY (field1)
);
表格内容
INSERT INTO mytable VALUES ( 62c36092-82a1-3a00-93d1-46196ee77204,"test", { 'f1' : 'La Vita E La Felicita', 'f2' : 'Michele Bravi' });
我可以使用devcenter直接查询时检索结果。但是在使用solr查询时,不会返回动态字段。
Solr查询响应:
{
"responseHeader": {
"status": 0,
"QTime": 1
},
"response": {
"numFound": 1,
"start": 0,
"docs": [
{
"field1": "62c36092-82a1-3a00-93d1-46196ee77204",
"field2": "test"
}
]
}
}
这是scheme.xml文件:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<schema name="autoSolrSchema" version="1.5">
<types>
<fieldType class="org.apache.solr.schema.TextField" name="TextField">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<fieldType class="org.apache.solr.schema.UUIDField" name="UUIDField"/>
<fieldType class="org.apache.solr.schema.BinaryField" name="BinaryField"/>
</types>
<fields>
<field indexed="true" multiValued="false" name="field1" stored="true" type="TextField"/>
<field indexed="true" multiValued="false" name="field2" stored="true" type="TextField"/>
<field indexed="true" multiValued="false" name="bfield" stored="true" type="BinaryField"/>
<dynamicField indexed="true" multiValued="false" name="cstdta_*" stored="true" type="TextField"/>
<field indexed="true" multiValued="false" name="cstdta_stc" stored="true" type="TextField"/>
<copyField source="cstdta_*" dest="cstdta_stc"/>
</fields>
<uniqueKey>resid</uniqueKey>
</schema>
我在this answer之后添加了复制字段。但它似乎不起作用。
更新
正如user3398164指出的那样,我需要以特定格式在动态字段中插入customdata。在我的情况下,我不得不使用此查询插入:
INSERT INTO mytable VALUES ( 62c36092-82a1-3a00-93d1-46196ee77204,"test", { 'cstdtaf1' : 'La Vita E La Felicita', 'cstdtaf2' : 'Michele Bravi' });
现在我得到了理想的结果:
{
"responseHeader": {
"status": 0,
"QTime": 1
},
"response": {
"numFound": 1,
"start": 0,
"docs": [
{
"field1": "62c36092-82a1-3a00-93d1-46196ee77204",
"field2": "test",
"cstdtaf1":"La Vita E La Felicita",
"cstdtaf2" : "Michele Bravi"
}
]
}
}
答案 0 :(得分:1)
@Sharun尝试插入以下链接中提到的数据 https://docs.datastax.com/en/datastax_enterprise/4.6/datastax_enterprise/srch/srchDynFlds.html
从参考网站复制:
在CQL中,要定义地图集合列,请使用相同的基本名称 (没有星号)就像你在schema.xml中的字段一样。对于 例如,在schema.xml中使用dyna_ *,使用dyna_作为名称 CQL地图集。
使用类型文本作为地图键。例如:
CREATE TABLE my_dynamic_table(... dyna_ map,.... 。 );使用CQL,使用基本名称将数据插入到地图中 每个映射对的第一个组件中的前缀或后缀。格式 使用前缀的地图是:{prefix_literal:literal, prefix_literal:literal ,. 。 。 }
例如,CQL地图如下所示:&#39; dyn _&#39; :{dyn_1:1,dyn_2: 2,dyn_3:3}