【发布时间】:2016-03-22 10:25:12
【问题描述】:
我正在尝试使用以下方法加入两个 Solr 核心:
http://localhost:8983/solr/keyspace.solr_table1/select/?q={!join+fromIndex=keyspace.solr_table2}name:Doe&indent=true&wt=json&force=true
Cassandra 中的列族具有相同的键空间,但它们没有相同的分区键(名称不同,数据类型也不同)。第一个列族有一个分区键“id”(int),第二个是“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
两个列族在二级索引中都包含空值:名称,这可能是连接不起作用的原因吗?如果是这样,有没有办法告诉忽略是否有空值并对非空值进行连接?
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>
非常感谢您的任何意见!
【问题讨论】:
-
能否提供 DSE 版本和两个表模式?
-
我编辑了我的初始帖子并添加了核心和 DSE 版本 (4.8) 的架构