1. 程式人生 > >solr中一對多,多對多關係

solr中一對多,多對多關係

先看下官方文件的例子:

假設有如下表結構:

data-config.xml:一對多,多對多的關係寫法如下:

一對多寫法:

多對多寫法:

本人使用的是以上的寫法,api中也給出了另一種寫法,但自己沒有測試過:

剛開始配置完成後,得出的結果始終是一對一:

如上圖:假如:item表和item_category表是一對多,但我這邊始終得出的結果是一對一,如:name和description不是一個name對應多個description(實際資料庫的結果是一對多的)有點不解;

其實,除了data-config.xml檔案需要配置外,還有個重要的檔案,managed-schema檔案(本人使用的是solr7,老版本里是schema.xml,操作都一樣,只要名稱不同)也需要修改:

新增索引欄位:

這個是最開始的配置,達不到理想的結果:

由於本人剛學習solr,不太熟悉,網上百度了一翻,才發現還有個:multiValued(多值的)屬性,想要的是一個name對應多個description,那麼就應該把description配置成多值的,所以新增multiValued屬性,修改managed-schema檔案:

再次匯入資料,得到想要的結果了

到此完成:

但是在使用中又遇到了一個問題,比如solr查詢記錄有5條,使用Java查詢:

HttpSolrClient solrServer = createSolrServer(“goods”);

SolrQuery query = new SolrQuery();

query.set(“q”, “:”);

// 設定分頁引數

query.setStart(1);

// 每一頁多少值

query.setRows(10);

QueryResponse response = solrServer.query(query);

SolrDocumentList solrDocumentList = response.getResults();

每頁10條,從第一頁開始,一切看著沒問題,可是結果只有4條,solr查詢少了一條記錄,百思不得其解…

原來資料庫預設分頁limit(mysql)是1,但solr是0,所以需要把query.setStart(1)–修改為–>query.setStart(0),從第一頁開始,才是正確的!!!

瀋陽治療溼疣醫院