2017-08-16 57 views
0

我有這樣的MongoDB文檔,,如何索引MongoDB的多值字段到Solr的5.3.0

{ 
    "_id" : ObjectId("5993d55cebb06d20f08521ad"), 
    "LoginInfoId" : NumberInt(410), 
    "EstablishmentName" : "xyz", 
    "ShopCategory" : "Crockery", 
    "likes" : NumberInt(21), 
    "ShopCats" : [ 1,5,3 ] 
    } 

    { 
    "_id" : ObjectId("5993d55cebb06d20f088871ad"), 
    "LoginInfoId" : NumberInt(411), 
    "EstablishmentName" : "abc", 
    "ShopCategory" : "Crockery", 
    "likes" : NumberInt(51), 
    "ShopCats" : [ 1,8,9 ] 
    } 

我需要索引字段ShopCats到Solr的字段作爲這樣的逗號分隔值 ,

「ShopCats」:[1,2,3]

我需要使用這些值做filterquery Solr中搜索

我曾試圖與一些模式字段定義

<field name="ShopCats" type="commaDelimited" indexed="true" stored="true" multiValued="true" /> 



<fieldType name="commaDelimited" class="solr.TextField"> 
     <analyzer> 
     <tokenizer class="solr.PatternTokenizerFactory" pattern=",\s*" /> 
     </analyzer> 
    </fieldType> 

不過MongoDB的文檔場ShopCats不進行索引solr

回答

0

我假設你使用Mongo的連接器,如果是,那麼蒙戈連接器解開陣列所以下面

{ 
"_id" : ObjectId("5993d55cebb06d20f08521ad"), 
"LoginInfoId" : NumberInt(410), 
"EstablishmentName" : "xyz", 
"ShopCategory" : "Crockery", 
"likes" : NumberInt(21), 
"ShopCats" : [ 1,5,3 ] 
} 

索引之前,將變更爲以下

{ 
"_id" : ObjectId("5993d55cebb06d20f08521ad"), 
"LoginInfoId" : NumberInt(410), 
"EstablishmentName" : "xyz", 
"ShopCategory" : "Crockery", 
"likes" : NumberInt(21), 
"ShopCats.0" : 1, 
"ShopCats.1" : 5, 
"ShopCats.2" : 3 
} 

每當有會發生這種情況一個子文檔,Solr沒有他的「子文檔」支持/ 您可能可以通過schema.xml中的copyField指令解決此問題。

我希望這會有所幫助。

+0

yes ,,, iam使用mongo連接器。我有大約40個ShopCats值,如果我使用copfield,那麼我應該聲明每40個ShopCats然後複製到一個字段。這是一個很好的做法嗎? – vampo458

+0

@ vampo458我不會評論最佳做法。但是,如果您使用Java連接到Mongo並提取這些字段並使用SolrJ進行索引,則可以克服這種情況。如果您覺得有幫助,請接受答案 – Jeyaprakash

+0

我正在使用PHP,Mongodb和solr,可以使用PHP solr類做同樣的事嗎? – vampo458