2016-01-20 42 views
0

我看到這個例外在SOLR索引從MongoDB的集合字段時,當我從MongoDB的集合試圖索引數據:獲得一個JSONParseException使用DataImportHandler

Exception while processing: products document : SolrInputDocument(fields: []):org.apache.solr.handler.dataimport.DataImportHandlerException: com.mongodb.util.JSONParseException: 
{idStr,name,code,description,price,brand,size,color} 
^ 
    at org.apache.solr.handler.dataimport.MongoEntityProcessor.initQuery(MongoEntityProcessor.java:46) 
    at org.apache.solr.handler.dataimport.MongoEntityProcessor.nextRow(MongoEntityProcessor.java:54) 
    at org.apache.solr.handler.dataimport.EntityProcessorWrapper.nextRow(EntityProcessorWrapper.java:244) 
    at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:476) 
    at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:415) 
    at org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:481) 
    at org.apache.solr.handler.dataimport.DataImporter$1.run(DataImporter.java:462) 
Caused by: com.mongodb.util.JSONParseException: 
{idStr,name,code,description,price,brand,size,color} 
^ 
    at com.mongodb.util.JSONParser.parseString(JSON.java:387) 

以下是在dataimport我的數據源配置文件目錄在我的核心的conf文件夾:

<dataConfig>  
<dataSource name="mymongodb" type="MongoDataSource" database="mongodb://*.*.*.*/testdb" /> 
    <document name="data"> 

     <entity 
     name="products" 
     processor="MongoEntityProcessor" 
     query="{idStr,name,code,description,price,brand,size,color}" 
     collection="products" 
     datasource="mymongodb" 
     transformer="MongoMapperTransformer" > 

     <field column="idstr" name="idstr" mongoField="idStr"/> 
     <field column="name" name="name" mongoField="name"/> 
     <field column="code" name="code" mongoField="code"/> 
     <field column="description" name="description" mongoField="description"/> 
     <field column="price" name="price" mongoField="price"/> 
     <field column="brand" name="brand" mongoField="brand"/> 
     <field column="size" name="size" mongoField="size"/> 
     <field column="color" name="color" mongoField="color"/> 

    <entity 
    name="categories" 
    processor="MongoEntityProcessor" 
    query="{'idStr':'${categories.idstr}'}" 
    collection="categories" 
    datasource="mymongodb" 
    transformer="MongoMapperTransformer"> 

     <field column="type" name="type" mongoField="type"/> 
    </entity> 
    </entity> 
    </document> 
</dataConfig> 

我想加入類別採集領域IDSTR的產品徵收的IDSTR(字段名=> IDSTR),並得到上述領域(名稱,描述,。從產品和類型領域來類別)。

任何意見/解決這個例外將非常讚賞。謝謝!

回答

0

您的SOLR字段被聲明爲idstr,但您在query屬性dataConfig中將其引用爲idStr(camelcase difference)。

+0

我不得不使用products.idstr,因爲我想加入類別IDSTR到產品的idstr(字段名稱)(在mongoDB產品集合中它仍然是idStr,所以我使用了mongoField =「idStr」)like:query =「{'idStr':'$ {products.idstr}'}」 現在我看到一個例外: 查詢失敗'{idStr,name,code,description,price,brand,size,color}' com.mongodb.util.JSONParseException: {idStr,名稱,代碼,描述,價格,品牌,尺寸,顏色} ^ \t此語法是否適用於索引產品中的這些字段? 查詢=「{idStr,名稱,代碼,描述,價格,品牌,尺寸,顏色}」 – AbhijitP

+0

OK ......以及'query'是根據堆棧跟蹤的問題。我專注於解決這個問題。你有沒有嘗試在字段周圍放置單引號:'{'idStr','name',...'? – nickdos

+0

是我現在試過: query =「{'idStr','name','code','description','price','brand','size','color'}」Processing while processing:products文檔:SolrInputDocument(fields:[]):org.apache.solr.handler.dataimport.DataImportHandlerException:com.mongodb.util.JSONParseException: {'idStr','name','code','description','price ','brand','size','color'} ^ .......... 引起:com.mongodb.util.JSONParseException: {'idStr','name','code ','描述','價格','品牌','尺寸','顏色'} – AbhijitP

0

我能解決這個... 以下是在數據源配置文件工作配置:

<entity 
name="products" 
query="select idStr,name,code,description,price,brand,size,color from products"> 

    <field name="prodidStr" column="idStr" /> 
    <field name="name" column="name" /> 
    <field name="code" column="name" /> 
    <field name="description" column="description" /> 
    <field name="price" column="price" /> 
    <field name="brand" column="brand" /> 
    <field name="size" column="size" /> 
    <field name="color" column="color" /> 

    <entity 
    name="categories" 
    dataSource="mongod"  
    query="select idStr,ancestors from categories where idStr = '${products.idStr}'"> 
    <field name="catidStr" column="idStr" /> 
    <field name="ancestors" column="ancestors" /> 
</entity> 

</entity> 
+0

感謝您在這裏分享的所有信息 – AbhijitP