2016-09-04 59 views
0

我是apache Solr的新手,做了一些研究並且學會了如何做索引。 目前我正面臨JSON文件索引問題。Apache solr無法索引JSON文件

我無法對下面提到的JSON文件數據格式編制索引。 刪除「文件」數組後,我能夠做到。 不知道爲什麼會發生。

我還沒有添加任何配置schema.xml文件。 嘗試了一些在Apache解決方案的樣本,我能夠做索引。

還有什麼是在schema.xml文件中使用id? 如果我的JSON包含employid我可以補充,而不是「ID」

[{ 
    "employid": "E64492", 
    "employGroup": "ABC ABC GROUP", 
    "ssn": "BE0003565737", 
    "country": { 
     "countryId": "56", 
     "countryName": "india" 
    }, 
    "sector": { 
     "sId": "40", 
     "sName": "name" 
    }, 
    "documents": [{ 
     "language": "EN", 
     "fileName": "Helloworld.pdf", 
     "fileExists": true, 
     "employid": "E64492" 
    }], 
}] 

可有一個人請幫助employid。

錯誤時拋出的細節:

"org.apache.solr.common.SolrException"],"msg":"Error parsing JSON field value. Unexpected OBJECT_START at [227], field=documents","code":400}} 

回答

1

你必須定義一個模式對應於你試圖插入文檔。
此外,你必須經過文件

"documents": [{ 
    "language": "EN", 
    "fileName": "Helloworld.pdf", 
    "fileExists": true, 
    "employid": "E64492" 
}], 

關於id場額外,,您可以將其重命名爲employe_id還記得更改標籤<uniqueKey>id</uniqueKey>到employe_id

你也可以有一個模式,而不unique_key。有關唯一密鑰的更多信息,請參閱this

+0

我已經刪除了額外的逗號,仍然是同一個問題 – Maddy

+0

我沒有理解employe_id和employeid之間的區別。我必須像這樣使用。 employid Maddy

+0

沒有區別。它只是該領域的一個名稱。你可以使用employeid。關於uniqueKey字段,是的 - 這就是你必須使用的。 –

1

該問題在the Solr Reference guide section on indexing with JSON中解釋,但在所有文本中都難以看到。

基本上有兩種方式來處理JSON:

,您可以指定使用直接Solr的慣例領域和遞歸結構
  1. Solr的輸入格式。在這種格式下,您可以將多個JSON對象提供給解析器,因爲您明確瞭解每個對象的結構。下面您指定的規則被映射到Solr文檔
  2. 通用JSON格式(或默認情況下在solrconfig.xml中指定您的收藏),你用

數組語法是第一個選項 - Solr輸入格式。但是,該格式不支持嵌套文檔與其他對象的結構相同,它需要一個_childDocuments_數組。

而通用的JSON解析器只能帶一個對象。

所以,你在十字路口,需要決定你想要做什麼。這很可能意味着要考慮要結束的模式,以及是否要明確定義或通過映射規則進行定義。

1

Maddy你試圖索引的是一個嵌套的JSON對象! Solr只允許JSON數據以FLAT格式進行索引。我的意思是說,國家和部門對象不能按照你想要的方式編入索引。您必須將它們拼合爲單獨的字段,即Country.countryId必須是一個單獨的字段,Country.countryName必須是單獨的字段。同樣,Sector.sId必須是單獨的字段,並且Sector.sectorName必須是單獨的字段。此外,最後一個文檔JSON對象中的對象應該以與聲明員工標識相同的方式進行聲明,您需要刪除文檔對象並自由放置每個字段。我希望你明白這一點。這將是100℅的工作。我再說一遍,你不能像這樣索引一個嵌套的JSON,你需要將JSON壓扁到最簡單。讓我知道如果這有助於:)。爲了更好地理解Solr管理員屏幕上的問題,請使用此JSON並嘗試在「文檔」部分對其進行索引,同時在Chrome或其他瀏覽器中通過單擊F12保持網絡選項卡打開,您將看到與您相同的錯誤進入控制檯!這就是爲什麼儘管你可以保持Country和Sector對象一樣,但你需要刪除數據對象並在其中自由聲明域。

0

最後我能夠做索引添加以下

 <field name="buyLimit" type="tdoubles"/> 
     <field name="country.countryId" type="tlongs"/> 
     <field name="country.countryName" type="strings"/> 
     <field name="creationDate" type="tlongs"/> 
     <field name="currency" type="string" indexed="true" stored="true"/> 
     ***<field name="documents.fileExists" type="booleans"/> 
     <field name="documents.fileName" type="strings"/> 
     <field name="documents.language" type="strings"/> 
     <field name="documents.researchId" type="strings"/>*** 
     <field name="opinion.opinion" type="strings"/> 
     <field name="opinion.opinionId" type="strings"/> 
     <field name="employeId" type="string" multiValued="false" indexed="true" stored="true"/> 
     <field name="s.sId" type="tlongs"/> 
     <field name="s.sName" type="strings"/> 
     <field name="type" type="string" indexed="true" stored="true"/> 

由於指定的架構定義的所有您的意見這讓我更瞭解Solr的了。