solr无法获取动态字段

时间:2016-07-20 06:02:47

标签: solr cassandra

我正在使用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"
      }
    ]
  }
}

1 个答案:

答案 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}