我正在尝试使用以下方法加入两个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>
非常感谢您的任何意见!
答案 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;。
时的正确语法强制连接时仍然是错误消息应该更好。
希望这有帮助。