在Datastax Enterprise中加入Solr核心null值错误

时间:2015-12-16 10:21:49

标签: solr cassandra

我正在尝试使用以下方法加入两个Solr核心:

  

http://localhost:8983/solr/keyspace.solr_table1/select/?q= {+加入的fromIndex = keyspace.solr_table2!}名称:Doe的安培;缩进=真安培;重量= JSON&安培;力=真

Cassandra中的列族具有相同的键空间,但它们没有相同的分区键(名称不同,数据类型也不同)。第一列系列具有分区键'(#);第二列是' id_text' (BIGINT)。我的搜索位于列名称'(二级索引,两个列族中的列名相同),我使用的是force = true。

结果是:

{
  "responseHeader":{
    "status":400,
    "QTime":1,
    "params":{
      "q":"{!join fromIndex=keyspace.solr_table1}name:Doe",
      "indent":"true",
      "force":"true",
      "wt":"json"}},
  "error":{
    "msg":"undefined field: \"null\"",
    "code":400},
  "params":"q={!join+fromIndex%3Dkeyspace.solr_table2}name:Doe&indent=true&force=true&wt=json"}

如果我在两个核心中进行简单搜索,我会得到结果:

  

http://localhost.40:8983/solr/keyspace.solr_table1/select?q=nom%3ADoe&wt=json&indent=true

两个列系列在辅助索引中都包含空值:name,这可能是连接无法工作的原因吗?如果是这样,有没有办法告诉你只是忽略是否有空值并且在非空的值上进行连接?

DSE版本为4.8。 第一个核心的架构是:

 <schema name="solr_quickstart" version="1.1">
 <types>
  <fieldType name="bigint" class="solr.TrieLongField"/>
  <fieldType name="string" class="solr.StrField"/>
  <fieldType name="text" class="solr.TextField">
    <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
  </fieldType>
  <fieldType name="int" class="solr.TrieIntField"/>
 </types>
 <fields>
<field name="id_individu" type="int" indexed="true"  stored="true"/>
<field name="nom" type="string" indexed="true"  stored="true"/>
<field name="prenom" type="string" indexed="true"  stored="true"/>
<field name="nom_conjoint" type="string" indexed="true"  stored="true"/>
<field name="prenom_conjoint" type="string" indexed="true"  stored="true"/>
<field name="id_gedcom" type="bigint" indexed="true"  stored="true"/>
<field name="all" type="string" docValues="true" indexed="true" stored="false" multiValued="true"/>
 </fields>

<defaultSearchField>nom</defaultSearchField>
<uniqueKey>(id_individu)</uniqueKey>
<copyField source="nom" dest="all"/>
<copyField source="prenom" dest="all"/>
<copyField source="nom_conjoint" dest="all"/>
<copyField source="prenom_conjoint" dest="all"/>
<copyField source="id_gedcom" dest="all"/>

</schema>

,第二个核心的架构是

    <schema name="solr_quickstart" version="1.1">
 <types>
  <fieldType name="bigint" class="solr.TrieLongField"/>
  <fieldType name="string" class="solr.StrField"/>
  <fieldType name="text" class="solr.TextField">
    <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
  </fieldType>
  <fieldType name="int" class="solr.TrieIntField"/>
 </types>
 <fields>
<field name="id" type="bigint" indexed="true"  stored="true"/>
<field name="nom" type="string" indexed="true"  stored="true"/>
<field name="prenom" type="string" indexed="true"  stored="true"/>
<field name="nom_conjoint" type="string" indexed="true"  stored="true"/>
<field name="prenom_conjoint" type="string" indexed="true"  stored="true"/>
<field name="id_gedcom" type="bigint" indexed="true"  stored="true"/>
<field name="all" type="string" docValues="true" indexed="true" stored="false" multiValued="true"/>
 </fields>

<defaultSearchField>nom</defaultSearchField>
<uniqueKey>(id)</uniqueKey>
<copyField source="nom" dest="all"/>
<copyField source="prenom" dest="all"/>
<copyField source="nom_conjoint" dest="all"/>
<copyField source="prenom_conjoint" dest="all"/>
<copyField source="id_gedcom" dest="all"/>

</schema>

非常感谢您的任何意见!

1 个答案:

答案 0 :(得分:0)

如果你在没有“强迫”的情况下运行它选项,您会收到以下消息:

  

&#34;连接的Solr核心必须具有相同的分区密钥验证器; from core有:org.apache.cassandra.db.marshal.LongType; to core有:org.apache.cassandra.db.marshal.Int32Type \ n如果要强制连接,请将force = true作为本地参数传递。&#34;

与文档指定的内容一致,作为联接在DSE join docs

工作的要求

所以,如果你想加入,我恐怕你不得不微调周围的事情。您可能还希望将版本1.5用于solr架构。

此外,如果您想使用“强制”&#39; param你需要改变语法。检查DSE文档,了解使用&#39; force&#39;。

时的正确语法

强制连接时仍然是错误消息应该更好。

希望这有帮助。